Golf Me An OOP!
Dos componentes importantes de la programación orientada a objetos son la herencia y la composición. Juntos, permiten crear jerarquías de clase simples pero poderosas para resolver problemas. Su tarea es analizar una serie de declaraciones sobre una jerarquía de clases y responder preguntas sobre la jerarquía.
Entrada
Una serie de declaraciones y preguntas sobre una jerarquía de clases, leídas de un archivo o entrada estándar, lo que sea mejor para su idioma. Si usa la opción de archivo, el nombre de archivo se pasará como primer argumento a su código (argumento de función o argumento de línea de comando, lo que elija). El formato es el siguiente:
<statement> : <name> is a <name>. | <name> has a <name>.
<question> : Is <name> a <name>? | Does <name> have a <name>?
<name> : a-z | A-Z | sequence of alphanumerics or underscores, starting with a letter
La entrada siempre será declaraciones, luego preguntas. Todos los nombres de clase comenzarán con una letra mayúscula en inglés ( A-Z
), y todos los nombres de miembros comenzarán con una letra minúscula en inglés ( a-z
). Todos los nombres distinguen entre mayúsculas y minúsculas, ABC123
no es la misma clase que Abc123
.
No habrá ninguna herencia cíclica; si B
hereda de A
, A
no heredará de B
ninguno de B
los hijos de ninguno .
Solo los nombres de clase formarán parte de una jerarquía: declaraciones como foo is a bar.
odocument has a name.
no ocurrirán.
Salida
Una serie de valores verdaderos o falsos, como respuestas a las consultas, escritos en la salida estándar o como el valor de retorno de su función. Si no tiene suficiente información para responder una pregunta (por ejemplo, preguntas que involucran nombres que no ha visto en las declaraciones), responda con un valor falso.
Casos de prueba
Caso 1:
Entrada:
B is a A.
C is a B.
A has a foo.
Does B have a foo?
Is C a A?
Is D a A?
Salida:
True
True
False
Caso 2:
Entrada:
Cop is a Person.
Criminal is a Person.
Sheriff is a Cop.
Crooked_Cop is a Cop.
Crooked_Cop is a Criminal.
BankRobber is a Criminal.
Cop has a badge.
Criminal has a criminal_record.
Person has a name.
Is Crooked_Cop a Person?
Does Criminal have a name?
Is Crooked_Cop a BankRobber?
Does Person have a potato?
Is Cop a Cop?
Salida:
True
True
False
False
True
Reglas
- Puedes responder con una función o un programa
- Las lagunas estándar están prohibidas
- Este es el código de golf , por lo que la respuesta correcta más corta en bytes gana
- La respuesta ganadora se elegirá en una semana.
¡Buena suerte, y que la OOP esté contigo!
Tabla de clasificación
El Fragmento de pila al final de esta publicación genera la tabla de clasificación a partir de las respuestas a) como una lista de la solución más corta por idioma yb) como una tabla de clasificación general.
Para asegurarse de que su respuesta se muestre, comience con un título, utilizando la siguiente plantilla de Markdown:
## Language Name, N bytes
¿Dónde N
está el tamaño de su envío? Si mejora su puntaje, puede mantener los puntajes antiguos en el título, tachándolos. Por ejemplo:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Si desea incluir varios números en su encabezado (por ejemplo, porque su puntaje es la suma de dos archivos o desea enumerar las penalizaciones de la bandera del intérprete por separado), asegúrese de que el puntaje real sea el último número en el encabezado:
## Perl, 43 + 2 (-p flag) = 45 bytes
También puede hacer que el nombre del idioma sea un enlace que luego aparecerá en el fragmento:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
Criminal is a Person
.Person has a name
.
Does Criminal have a name?
igual aTrue
? ¿Todos los objetos tienen un nombre?