Tarefa
Sua tarefa é escrever uma função ou um programa em um idioma de sua escolha que analise algumas declarações e determine se é possível concluir com base nessas declarações que os porcos são capazes de voar.
Entrada
A entrada é uma String que pode ser lida em STDIN, usada como argumento de função ou mesmo armazenada em um arquivo. A entrada pode ser descrita usando o seguinte 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" ;
Exemplo de entrada (veja mais exemplos abaixo):
Pigs are green. Everything that is green is also intelligent. Everything that is able to fly is also not intelligent. Pigs are sweet.
Resultado
A saída pode ser retornada por sua função, ser gravada em um arquivo ou impressa em STDOUT. Existem 5 casos diferentes a serem tratados:
- As declarações dadas são válidas, consistentes e têm como consequência lógica que os porcos possam voar. Nesse caso, você deve produzir
Yes
. - As declarações dadas são válidas, consistentes e têm como consequência lógica que os porcos não podem voar. Nesse caso, você deve produzir
No
. - Não se pode concluir com base em declarações válidas e consistentes, se os porcos podem voar ou não. Nesse caso, você deve produzir
Maybe
. - As declarações dadas são válidas, mas não consistentes (ou seja, há uma contradição nas declarações dadas). Desde o ex quodlibet falso , decidimos produzir
Yes
nesse caso. - As instruções fornecidas não são válidas, ou seja, não são formatadas de acordo com o EBNF fornecido. Nesse caso, você pode fazer o que quiser.
Detalhes
- Você pode assumir que os atributos fornecidos são independentes um do outro. Assim, por exemplo, um porco pode ser jovem e velho, verde, vermelho e azul ao mesmo tempo, sem causar inconsistência. No entanto, um porco pode não ser 'verde' e 'não verde' ao mesmo tempo, isso é uma contradição e deve ser tratado como descrito em (4).
- Para cada atributo, suponha que exista pelo menos um objeto (não necessariamente um porco) no universo que tenha o atributo fornecido e um objeto que não o possua.
Exemplo de entradas e saídas
Entrada:
Pigs are green. Everything that is green is also intelligent. Everything that is able to fly is also not intelligent.
Resultado: Como os porcos são verdes e, portanto, inteligentes, e tudo o que é capaz de voar não é inteligente, os porcos não podem voar. Saída é No
.
Entrada:
Pigs are old. Everything that is not able to fly is also not old.
Resultado: se os porcos não conseguiam voar, eles também não eram velhos. Mas como eles são antigos, você deve produzir Yes
.
Entrada:
Everything that is sweet is also not old. Everything that is intelligent is also blue.
Saída: Maybe
.
Entrada:
Pigs are not able to fly. Everything that is red is also sweet. Everything that is sweet is also not red.
Saída: Embora a primeira declaração implique que os porcos não podem voar, as seguintes declarações se contradizem e, portanto, a saída deve ser Yes
.
Entrada:
Pigs are very smart. Pigs are able to fly.
Saída: o que você quiser, pois a String não corresponde aos critérios mencionados acima.
Vencedora
Isso é código-golfe , então a resposta correta mais curta (em bytes) vence. O vencedor será escolhido uma semana após a publicação da primeira resposta correta.