Tarea
Su tarea es escribir una función o un programa en un lenguaje de su elección que analice un par de declaraciones y determine si de esas declaraciones se puede concluir que los cerdos pueden volar.
Entrada
La entrada es una cadena que puede leerse desde STDIN, tomarse como un argumento de función o incluso almacenarse en un archivo. La entrada se puede describir utilizando el siguiente 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" ;
Entrada de ejemplo (ver más ejemplos a continuación):
Pigs are green. Everything that is green is also intelligent. Everything that is able to fly is also not intelligent. Pigs are sweet.
Salida
La función puede devolver el resultado, escribirlo en un archivo o imprimirlo en STDOUT. Hay 5 casos diferentes para ser manejados:
- Las declaraciones dadas son válidas, consistentes y tienen como consecuencia lógica que los cerdos pueden volar. En ese caso, debe generar
Yes
. - Las declaraciones dadas son válidas, consistentes y tienen como consecuencia lógica que los cerdos no pueden volar. En ese caso, debe generar
No
. - No se puede concluir de las declaraciones dadas, válidas y consistentes si los cerdos pueden volar o no. En ese caso, debe generar
Maybe
. - Las declaraciones dadas son válidas, pero no consistentes (es decir, hay una contradicción en las declaraciones dadas). Desde ex falso quodlibet , decidimos dar salida
Yes
en ese caso. - Las declaraciones dadas no son válidas, es decir, no están formateadas de acuerdo con el EBNF dado. En ese caso, puede hacer lo que quiera.
Detalles
- Puede suponer que los atributos dados son independientes entre sí. Entonces, por ejemplo, un cerdo puede ser joven y viejo, verde, rojo y azul al mismo tiempo sin causar ninguna inconsistencia. Sin embargo, un cerdo puede no ser 'verde' y 'no verde' al mismo tiempo, eso es una contradicción y debe manejarse como se describe en (4).
- Para cada atributo, suponga que hay al menos un objeto (no necesariamente un cerdo) en el universo que tiene el atributo dado y un objeto que no lo tiene.
Ejemplo de entradas y salidas
Entrada:
Pigs are green. Everything that is green is also intelligent. Everything that is able to fly is also not intelligent.
Salida: como los cerdos son verdes y, por lo tanto, inteligentes, y todo lo que puede volar no es inteligente, los cerdos no pueden volar. La salida es No
.
Entrada:
Pigs are old. Everything that is not able to fly is also not old.
Salida: si los cerdos no pudieron volar, tampoco eran viejos. Pero como son viejos, debes dar salida Yes
.
Entrada:
Everything that is sweet is also not old. Everything that is intelligent is also blue.
Salida: Maybe
.
Entrada:
Pigs are not able to fly. Everything that is red is also sweet. Everything that is sweet is also not red.
Salida: aunque la primera declaración implica que los cerdos no pueden volar, las siguientes declaraciones se contradicen entre sí y, por lo tanto, la salida debe serlo Yes
.
Entrada:
Pigs are very smart. Pigs are able to fly.
Salida: lo que quieras, ya que la cadena no coincide con los criterios mencionados anteriormente.
Ganador
Este es el código de golf , por lo que gana la respuesta correcta más corta (en bytes). El ganador será elegido una semana después de que se publique la primera respuesta correcta.