Tâche
Votre tâche consiste à écrire une fonction ou un programme dans une langue de votre choix qui analyse deux déclarations et détermine s’il est possible de conclure que, de ces déclarations, les porcs sont capables de voler.
Contribution
L'entrée est une chaîne pouvant être lue à partir de STDIN, prise comme argument de fonction ou même être stockée dans un fichier. L'entrée peut être décrite à l'aide du fichier EBNF suivant:
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" ;
Exemple d'entrée (voir d'autres exemples ci-dessous):
Pigs are green. Everything that is green is also intelligent. Everything that is able to fly is also not intelligent. Pigs are sweet.
Sortie
La sortie peut être renvoyée par votre fonction, être écrite dans un fichier ou imprimée dans STDOUT. Il y a 5 cas différents à traiter:
- Les déclarations données sont valides, cohérentes et ont pour conséquence logique que les porcs peuvent voler. Dans ce cas, vous devez sortir
Yes
. - Les déclarations données sont valides, cohérentes et ont pour conséquence logique que les porcs ne peuvent pas voler. Dans ce cas, vous devez sortir
No
. - Les affirmations données, valides et cohérentes ne permettent pas de conclure que les porcs peuvent voler ou non. Dans ce cas, vous devez sortir
Maybe
. - Les déclarations données sont valides, mais pas cohérentes (c’est-à-dire qu’il ya une contradiction dans les déclarations données). Depuis ex falso quodlibet , nous décidons de sortir
Yes
dans ce cas. - Les déclarations données ne sont pas valides, c’est-à-dire qu’elles ne sont pas formatées en fonction du fichier EBNF donné. Dans ce cas, vous pouvez faire ce que vous voulez.
Détails
- Vous pouvez supposer que les attributs donnés sont indépendants les uns des autres. Ainsi, par exemple, un cochon peut être jeune et vieux, vert, rouge et bleu en même temps, sans causer d'incohérence. Cependant, un cochon peut ne pas être «vert» et «pas vert» en même temps, c'est une contradiction et doit être traité comme décrit dans (4).
- Pour chaque attribut, supposons qu'il y ait au moins un objet (pas nécessairement un cochon) dans l'univers qui possède l'attribut donné et un objet qui ne l'a pas.
Exemple d'entrées et de sorties
Contribution:
Pigs are green. Everything that is green is also intelligent. Everything that is able to fly is also not intelligent.
Production: Les porcs étant verts et donc intelligents, et tout ce qui est capable de voler n’est pas intelligent, les porcs ne peuvent pas voler. La sortie est No
.
Contribution:
Pigs are old. Everything that is not able to fly is also not old.
Production: Si les porcs n'étaient pas capables de voler, ils n'étaient pas non plus vieux. Mais comme ils sont vieux, vous devez sortir Yes
.
Contribution:
Everything that is sweet is also not old. Everything that is intelligent is also blue.
Sortie: Maybe
.
Contribution:
Pigs are not able to fly. Everything that is red is also sweet. Everything that is sweet is also not red.
Résultat: Bien que la première déclaration implique que les porcs ne peuvent pas voler, les déclarations suivantes se contredisent et par conséquent, le résultat doit être Yes
.
Contribution:
Pigs are very smart. Pigs are able to fly.
Sortie: Tout ce que vous voulez, car la chaîne ne correspond pas aux critères mentionnés ci-dessus.
Gagnant
C'est du code-golf , donc la réponse correcte la plus courte (en octets) est gagnante. Le gagnant sera choisi une semaine après la publication de la première réponse correcte.