Compito
Il tuo compito è scrivere una funzione o un programma in una lingua a tua scelta che analizzi un paio di affermazioni e determini se da quelle affermazioni si può concludere che i maiali sono in grado di volare.
Ingresso
L'input è una stringa che può essere letta da STDIN, presa come argomento di funzione o addirittura memorizzata in un file. L'ingresso può essere descritto usando il seguente 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" ;
Esempio di input (vedere altri esempi di seguito):
Pigs are green. Everything that is green is also intelligent. Everything that is able to fly is also not intelligent. Pigs are sweet.
Produzione
L'output può essere restituito dalla funzione, essere scritto in un file o stampato su STDOUT. Esistono 5 casi diversi da gestire:
- Le dichiarazioni fornite sono valide, coerenti e hanno come conseguenza logica che i maiali possono volare. In tal caso, è necessario eseguire l'output
Yes
. - Le dichiarazioni fornite sono valide, coerenti e hanno come conseguenza logica che i maiali non possono volare. In tal caso, è necessario eseguire l'output
No
. - Non si può concludere dalle affermazioni fornite, valide e coerenti se i suini possano volare o meno. In tal caso, è necessario eseguire l'output
Maybe
. - Le dichiarazioni fornite sono valide, ma non coerenti (ovvero c'è una contraddizione nelle dichiarazioni fornite). Poiché ex falso quodlibet , decidiamo di produrre
Yes
in quel caso. - Le istruzioni fornite non sono valide, ovvero non sono formattate in base al dato EBNF. In tal caso, puoi fare quello che vuoi.
Dettagli
- Si può presumere che gli attributi dati siano indipendenti l'uno dall'altro. Quindi, ad esempio, un maiale può essere giovane e vecchio, verde, rosso e blu allo stesso tempo senza causare incoerenze. Tuttavia, un maiale potrebbe non essere "verde" e "non verde" allo stesso tempo, è una contraddizione e dovrebbe essere gestito come descritto in (4).
- Per ogni attributo, supponi che ci sia almeno un oggetto (non necessariamente un maiale) nell'universo che ha l'attributo dato e un oggetto che non lo possiede.
Ingressi e uscite di esempio
Ingresso:
Pigs are green. Everything that is green is also intelligent. Everything that is able to fly is also not intelligent.
Risultato: poiché i maiali sono verdi e quindi intelligenti e tutto ciò che è in grado di volare non è intelligente, i maiali non possono volare. L'output è No
.
Ingresso:
Pigs are old. Everything that is not able to fly is also not old.
Risultato: se i maiali non erano in grado di volare, non erano nemmeno vecchi. Ma poiché sono vecchi, è necessario produrre Yes
.
Ingresso:
Everything that is sweet is also not old. Everything that is intelligent is also blue.
Uscita: Maybe
.
Ingresso:
Pigs are not able to fly. Everything that is red is also sweet. Everything that is sweet is also not red.
Output: Sebbene la prima affermazione implichi che i maiali non possono volare, le seguenti affermazioni si contraddicono a vicenda e quindi l'output deve essere Yes
.
Ingresso:
Pigs are very smart. Pigs are able to fly.
Output: Qualunque cosa tu voglia, poiché la stringa non corrisponde ai criteri sopra menzionati.
Vincitore
Questo è code-golf , quindi vince la risposta corretta più breve (in byte). Il vincitore verrà scelto una settimana dopo la pubblicazione della prima risposta corretta.