Aufgabe
Ihre Aufgabe ist es, eine Funktion oder ein Programm in einer Sprache Ihrer Wahl zu schreiben, die einige Aussagen analysiert und feststellt, ob aus diesen Aussagen geschlossen werden kann, dass Schweine fliegen können.
Eingang
Die Eingabe ist eine Zeichenfolge, die aus STDIN gelesen, als Funktionsargument verwendet oder sogar in einer Datei gespeichert werden kann. Die Eingabe kann mit folgendem EBNF beschrieben werden:
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" ;
Beispieleingabe (siehe weitere Beispiele unten):
Pigs are green. Everything that is green is also intelligent. Everything that is able to fly is also not intelligent. Pigs are sweet.
Ausgabe
Die Ausgabe kann von Ihrer Funktion zurückgegeben, in eine Datei geschrieben oder an STDOUT gedruckt werden. Es sind 5 verschiedene Fälle zu behandeln:
- Die angegebenen Aussagen sind gültig, konsistent und haben logischerweise zur Folge, dass Schweine fliegen können. In diesem Fall müssen Sie ausgeben
Yes
. - Die angegebenen Aussagen sind gültig, konsistent und haben als logische Konsequenz, dass Schweine nicht fliegen können. In diesem Fall müssen Sie ausgeben
No
. - Aus den gegebenen, gültigen und übereinstimmenden Aussagen kann nicht geschlossen werden, ob Schweine fliegen können oder nicht. In diesem Fall müssen Sie ausgeben
Maybe
. - Die angegebenen Aussagen sind gültig, aber nicht konsistent (dh es gibt einen Widerspruch in den angegebenen Aussagen). Da ex falso quodlibet , entscheiden wir uns
Yes
in diesem Fall für die Ausgabe . - Die angegebenen Aussagen sind ungültig, dh sie sind nicht gemäß der angegebenen EBNF formatiert. In diesem Fall können Sie tun, was Sie wollen.
Einzelheiten
- Sie können davon ausgehen, dass die angegebenen Attribute unabhängig voneinander sind. So kann beispielsweise ein Schwein jung und alt, grün, rot und blau gleichzeitig sein, ohne dass es zu Inkonsistenzen kommt. Ein Schwein darf jedoch nicht gleichzeitig 'grün' und 'nicht grün' sein, das ist ein Widerspruch und sollte wie in (4) beschrieben behandelt werden.
- Nehmen Sie für jedes Attribut an, dass es mindestens ein Objekt (nicht unbedingt ein Schwein) im Universum gibt, das das angegebene Attribut hat, und ein Objekt, das es nicht hat.
Beispiel Ein- und Ausgänge
Eingang:
Pigs are green. Everything that is green is also intelligent. Everything that is able to fly is also not intelligent.
Output: Da Schweine grün und daher intelligent sind und alles, was fliegen kann, nicht intelligent ist, können Schweine nicht fliegen. Ausgabe ist No
.
Eingang:
Pigs are old. Everything that is not able to fly is also not old.
Output: Wenn Schweine nicht fliegen konnten, waren sie auch nicht alt. Aber wie sie alt sind, müssen Sie ausgeben Yes
.
Eingang:
Everything that is sweet is also not old. Everything that is intelligent is also blue.
Ausgang: Maybe
.
Eingang:
Pigs are not able to fly. Everything that is red is also sweet. Everything that is sweet is also not red.
Ausgabe: Obwohl die erste Aussage impliziert, dass Schweine nicht fliegen können, widersprechen sich die folgenden Aussagen und daher muss die Ausgabe sein Yes
.
Eingang:
Pigs are very smart. Pigs are able to fly.
Ausgabe: Was auch immer Sie möchten, da der String nicht den oben genannten Kriterien entspricht.
Gewinner
Das ist Code-Golf , also gewinnt die kürzeste richtige Antwort (in Bytes). Der Gewinner wird eine Woche nach dem Absenden der ersten richtigen Antwort ermittelt.