Завдання
Ваше завдання полягає в тому, щоб написати функцію або програму мовою на ваш вибір, яка аналізує пару тверджень і визначає, чи можна зробити висновок із тих тверджень, що свині здатні літати.
Вхідні дані
Вхід - це рядок, яку можна прочитати з 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 falso 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.
Вихід: Що б ви не хотіли, так як String не відповідає зазначеним вище критеріям.
Переможець
Це код-гольф , тому найкоротша правильна відповідь (у байтах) виграє. Переможець буде обраний через тиждень після опублікування першої правильної відповіді.