Golf Me An OOP!
Due componenti importanti della programmazione orientata agli oggetti sono ereditarietà e composizione. Insieme, consentono di creare gerarchie di classi semplici ma potenti per risolvere i problemi. Il tuo compito è analizzare una serie di dichiarazioni su una gerarchia di classi e rispondere a domande sulla gerarchia.
Ingresso
Una serie di dichiarazioni e domande su una gerarchia di classi, lette da un file o da un input standard, a seconda di quale sia la migliore per la tua lingua. Se si utilizza l'opzione file, il nome file verrà passato come primo argomento al codice (argomento della funzione o argomento della riga di comando, a seconda di quale si sceglie). Il formato è il seguente:
<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
L'input sarà sempre dichiarazioni, quindi domande. Tutti i nomi delle classi inizieranno con una lettera inglese maiuscola ( A-Z
) e tutti i nomi dei membri inizieranno con una lettera inglese minuscola ( a-z
). Tutti i nomi fanno distinzione tra maiuscole e minuscole - ABC123
non è la stessa classe di Abc123
.
Non ci sarà alcuna eredità ciclica - se B
eredita da A
, A
non erediterà da B
o di alcun B
figlio.
Solo i nomi delle classi faranno parte di una gerarchia, ad esempio istruzioni come foo is a bar.
o document has a name.
non si verificheranno.
Produzione
Una serie di valori di verità o falsità, come risposte alle query, scritti nell'output standard o come valore di ritorno della funzione. Se non si dispone di informazioni sufficienti per rispondere a una domanda (ad esempio domande che coinvolgono nomi che non sono stati visualizzati nelle dichiarazioni), rispondere con un valore falso.
Casi test
Caso 1:
Ingresso:
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?
Produzione:
True
True
False
Caso 2:
Ingresso:
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?
Produzione:
True
True
False
False
True
Regole
- Puoi rispondere con una funzione o un programma
- Sono vietate le scappatoie standard
- Questo è code-golf , quindi vince la risposta corretta più breve in byte
- La risposta vincente verrà scelta tra una settimana
Buona fortuna e che OOP sia con te!
Classifica
Lo snippet di stack in fondo a questo post genera la classifica dalle risposte a) come un elenco della soluzione più breve per lingua eb) come classifica generale.
Per assicurarti che la tua risposta venga visualizzata, ti preghiamo di iniziare la risposta con un titolo, utilizzando il seguente modello Markdown:
## Language Name, N bytes
dov'è N
la dimensione del tuo invio. Se si migliora il punteggio, è possibile mantenere i vecchi punteggi nel titolo, colpendoli. Per esempio:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Se si desidera includere più numeri nell'intestazione (ad es. Perché il punteggio è la somma di due file o si desidera elencare separatamente le penalità del flag dell'interprete), assicurarsi che il punteggio effettivo sia l' ultimo numero nell'intestazione:
## Perl, 43 + 2 (-p flag) = 45 bytes
Puoi anche rendere il nome della lingua un collegamento che verrà quindi visualizzato nello snippet:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
Criminal is a Person
. Person has a name
.
Does Criminal have a name?
uguale aTrue
? Tutti gli oggetti hanno un nome?