任务
您的任务是用您选择的语言编写函数或程序,该函数或程序分析几个语句并确定是否可以从这些语句中得出猪可以飞的结论。
输入项
输入是一个字符串,可以从STDIN读取,可以作为函数参数,甚至可以存储在文件中。可以使用以下EBNF描述输入:
input = statement , {statement};
statement = (("Pigs are ", attribute) | ("Everything that is ", attribute, "is also ", attribute)), ". ";
attribute = [not], ("able to fly" | singleAttribute);
singleAttribute = letter, {letter};
letter = "a" | "b" | "c" | "d" | "e" | "f" | "g"
| "h" | "i" | "j" | "k" | "l" | "m" | "n"
| "o" | "p" | "q" | "r" | "s" | "t" | "u"
| "v" | "w" | "x" | "y" | "z" ;
输入示例(请参见下面的更多示例):
Pigs are green. Everything that is green is also intelligent. Everything that is able to fly is also not intelligent. Pigs are sweet.
输出量
输出可以由您的函数返回,可以写入文件或打印到STDOUT。有5种不同的情况需要处理:
- 给定的陈述是有效,一致的,并且逻辑上会导致猪会飞。在这种情况下,您必须输出
Yes
。 - 给定的陈述是有效,一致的,并且逻辑上导致猪不能飞。在这种情况下,您必须输出
No
。 - 不能从给定的,有效的,一致的陈述中得出结论,即猪是否会飞。在这种情况下,您必须输出
Maybe
。 - 给定的语句有效,但不一致(即给定的语句存在矛盾)。由于ex quodlibet,我们决定
Yes
在这种情况下输出。 - 给定的语句无效,即,未根据给定的EBNF格式化它们。在这种情况下,您可以做任何您想做的事情。
细节
- 您可以假设给定的属性彼此独立。因此,例如,一头猪可以是老幼的,绿色,红色和蓝色的,而不会引起任何不一致。但是,猪可能不会同时是“绿色”和“不是绿色”,这是矛盾的,应按照(4)中所述进行处理。
- 对于每个属性,假定宇宙中至少有一个具有给定属性的对象(不一定是猪),以及一个不具有给定属性的对象。
输入和输出示例
输入:
Pigs are green. Everything that is green is also intelligent. Everything that is able to fly is also not intelligent.
输出:由于猪是绿色的,因此很聪明,并且所有能飞的都不聪明,所以猪不能飞。输出为No
。
输入:
Pigs are old. Everything that is not able to fly is also not old.
输出:如果猪不能飞行,那么它们也不老。但是,由于它们很旧,您必须输出Yes
。
输入:
Everything that is sweet is also not old. Everything that is intelligent is also blue.
输出: Maybe
。
输入:
Pigs are not able to fly. Everything that is red is also sweet. Everything that is sweet is also not red.
输出:尽管第一个语句暗示猪不能飞,但以下语句彼此矛盾,因此输出必须为Yes
。
输入:
Pigs are very smart. Pigs are able to fly.
输出:所需的任何内容,因为字符串不符合上述条件。
优胜者
这是代码高尔夫球,因此最短的正确答案(以字节为单位)获胜。在第一个正确答案发布后的一周内将选择获奖者。