Zadanie
Twoim zadaniem jest napisanie funkcji lub programu w wybranym języku, który analizuje kilka instrukcji i określa, czy można wywnioskować z tych instrukcji, że świnie są w stanie latać.
Wejście
Dane wejściowe to ciąg znaków, który można odczytać ze STDIN, wziąć jako argument funkcji lub nawet zapisać w pliku. Dane wejściowe można opisać za pomocą następującego 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" ;
Przykładowe dane wejściowe (zobacz więcej przykładów poniżej):
Pigs are green. Everything that is green is also intelligent. Everything that is able to fly is also not intelligent. Pigs are sweet.
Wynik
Dane wyjściowe mogą zostać zwrócone przez twoją funkcję, zapisane w pliku lub wydrukowane do STDOUT. Do rozwiązania jest 5 różnych przypadków:
- Podane stwierdzenia są prawidłowe, spójne i mają logiczną konsekwencję, że świnie mogą latać. W takim przypadku musisz wydrukować
Yes
. - Podane stwierdzenia są ważne, spójne i mają logiczną konsekwencję, że świnie nie mogą latać. W takim przypadku musisz wydrukować
No
. - Z podanych, ważnych i spójnych stwierdzeń nie można wywnioskować, czy świnie mogą latać, czy nie. W takim przypadku musisz wydrukować
Maybe
. - Podane instrukcje są poprawne, ale niespójne (tzn. Istnieje sprzeczność w podanych instrukcjach). Ponieważ ex falso quodlibet decydujemy się na wyjście
Yes
w tym przypadku. - Podane instrukcje są niepoprawne, tzn. Nie są sformatowane zgodnie z danym EBNF. W takim przypadku możesz zrobić, co chcesz.
Detale
- Możesz założyć, że podane atrybuty są od siebie niezależne. Na przykład świnia może być jednocześnie młoda i stara, zielona, czerwona i niebieska jednocześnie, nie powodując niespójności. Jednak świnia może nie być jednocześnie „zielona” i „nie zielona”, co stanowi sprzeczność i należy z nią postępować zgodnie z opisem w (4).
- Dla każdego atrybutu załóżmy, że istnieje co najmniej jeden obiekt (niekoniecznie świnia) we wszechświecie, który ma dany atrybut, i jeden obiekt, który go nie ma.
Przykładowe wejścia i wyjścia
Wejście:
Pigs are green. Everything that is green is also intelligent. Everything that is able to fly is also not intelligent.
Wyjście: ponieważ świnie są zielone, a zatem inteligentne, a wszystko, co potrafi latać, nie jest inteligentne, świnie nie mogą latać. Dane wyjściowe to No
.
Wejście:
Pigs are old. Everything that is not able to fly is also not old.
Wyjście: jeśli świnie nie były w stanie latać, nie były również stare. Ale ponieważ są one stare, musisz generować dane wyjściowe Yes
.
Wejście:
Everything that is sweet is also not old. Everything that is intelligent is also blue.
Wyjście: Maybe
.
Wejście:
Pigs are not able to fly. Everything that is red is also sweet. Everything that is sweet is also not red.
Wyjście: Chociaż pierwsze stwierdzenie sugeruje, że świnie nie mogą latać, poniższe stwierdzenia są ze sobą sprzeczne i dlatego wynik musi być Yes
.
Wejście:
Pigs are very smart. Pigs are able to fly.
Dane wyjściowe: Cokolwiek chcesz, ponieważ ciąg nie spełnia kryteriów wymienionych powyżej.
Zwycięzca
To jest golf golfowy , więc wygrywa najkrótsza poprawna odpowiedź (w bajtach). Zwycięzca zostanie wybrany tydzień po opublikowaniu pierwszej poprawnej odpowiedzi.