バックグラウンド
ビルとジョンの2人がいます。そのうちの1人は常に真実を語る騎士であり、もう1人は常に嘘をつく悪魔です。あなたは誰が騎士であり、誰が悪党であるかを知りません。それから、各人はだれが騎士で、だれが騎士であるかについてのいくつかの声明を言います。この情報を使用して、誰が騎士で誰が悪党であるかを結論付けなければなりません。
騎士とKnavesロジックの問題は Booleen代数に基づいています。人が言う言葉はブーリアンの充足可能性の問題を形成します。knaveのステートメントは常にfalseでなければならず、他のKnightのステートメントは常にtrueでなければなりません。
ジョンは「私はどちらもナイフであり、ビルはナイフだ」と言います。ジョンが騎士だった場合、この声明は間違っているので、彼は騎士になることはできません。もし彼が悪党で、ビルが騎士なら、最初の部分が真実だと思っていたとしても、この声明はまだ間違っているでしょう。だから、ジョンは悪魔です。
チャレンジ
あなたの挑戦は、各人によって作られた声明のリストを取り、誰が悪党で誰が騎士であるかを把握する、可能な限り最短のプログラムを書くことです。カバーする詳細がたくさんあるので、この問題は3つのセクションで説明されています。
入力
入力は2行で、その後に改行が続きます。各行には、文字の1つの名前、コロン、その人が言ったいくつかの文が続きます。一人が騎士である場合、彼の文章はすべて真実になり、すべてのナイフの文章は偽になります。文の最初の文字は常に大文字で、すべての文はピリオドで終わります。以下に例を示します。
Joe: Both I am a knight and neither Steve is a knave nor I am a knave.
Steve: Joe is a knave. Either Joe is a knight or I am a knight.
解析
各文は、少なくとも1つの句で構成されます。各句には、いくつかの項目のいずれかが含まれています(できれば、私の表記法を理解できます)。
both [clause] and [clause]
either [clause] or [clause]
neither [clause] nor [clause]
[I am | (other person's name) is] a [knight | knave]
これは、ポーランドの表記法と同様の方法で理解できるため、明確です。文の例を次に示します。
Both I am a knight and neither Steve is a knave nor I am a knave.
ブール代数への変換は簡単です。「両方」のステートメントはANDであり、「いずれか」ステートメントはXORであり、「どちらでもない」ステートメントはNORです。
(I am a knight) AND ((Steve is a knave) NOR (I am a knave))
出力
出力は2行で構成されます。各行は(順番に)人の名前で構成され、その後、彼が騎士であるか、悪党であるかを示します。常に1人の騎士と1人の小人がいます。上記の例の出力は次のとおりです。
Joe is the knave.
Steve is the knight.
問題が解決できない場合(だれが何であるかわからない場合、または解決策がない場合)、プログラムは有効な出力を生成する以外は何でもできます。
その他の例
入力
Sir Lancelot: Either both I am a knight and Merlin is a knave or both I am a knave and Merlin is a knight.
Merlin: Either both I am a knight and Sir Lancelot is a knight or both I am a knave and Sir Lancelot is a knave.
出力
Sir Lancelot is the knight.
Merlin is the knave.
入力
David: Neither I am a knave nor Patrick is a knight. Either I am a knight or Patrick is a knave.
Patrick: Either I am a knight or both I am a knight and David is a knight.
出力
David is the knave.
Patrick is the knight.
入力
Lizard: I am a knight.
Spock: I am a knave.
1つの可能な出力
Rock Paper Scissors
規則、規制、および注記
- 標準コードのゴルフ規則が適用されます
- プログラムは印刷可能なASCIIのみで構成されている必要があります
- すべての入力と出力は、STDINとSTDOUTからのものです。