Golf ich ein OOP!
Zwei wichtige Komponenten der objektorientierten Programmierung sind Vererbung und Komposition. Zusammen ermöglichen sie die Erstellung einfacher, aber leistungsfähiger Klassenhierarchien zur Lösung von Problemen. Ihre Aufgabe besteht darin, eine Reihe von Anweisungen zu einer Klassenhierarchie zu analysieren und Fragen zur Hierarchie zu beantworten.
Eingang
Eine Reihe von Anweisungen und Fragen zu einer Klassenhierarchie, die aus einer Datei oder Standardeingabe gelesen werden, je nachdem, was für Ihre Sprache am besten geeignet ist. Wenn Sie die Option file verwenden, wird der Dateiname als erstes Argument an Ihren Code übergeben (Funktionsargument oder Befehlszeilenargument, je nachdem, was Sie auswählen). Das Format ist wie folgt:
<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
Die Eingabe wird immer Aussagen, dann Fragen sein. Alle Klassennamen beginnen mit einem englischen Großbuchstaben ( A-Z
) und alle Mitgliedsnamen mit einem englischen Kleinbuchstaben ( a-z
). Bei allen Namen muss die Groß- und Kleinschreibung beachtet werden - entspricht ABC123
nicht der Klasse von Abc123
.
Es wird keine zyklische Vererbung geben - wenn B
erbt von A
, A
wird er nicht von B
oder von einem der B
Kinder erben .
Nur Klassennamen werden Teil einer Hierarchie - Anweisungen wie foo is a bar.
oder document has a name.
werden nicht vorkommen.
Ausgabe
Eine Reihe wahrer oder falscher Werte als Antworten auf die Abfragen, die in die Standardausgabe oder als Rückgabewert Ihrer Funktion geschrieben wurden. Wenn Sie nicht genügend Informationen haben, um eine Frage zu beantworten (z. B. Fragen, die Namen betreffen, die Sie in den Aussagen nicht gesehen haben), antworten Sie mit einem falschen Wert.
Testfälle
Fall 1:
Eingang:
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?
Ausgabe:
True
True
False
Fall 2:
Eingang:
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?
Ausgabe:
True
True
False
False
True
Regeln
- Sie können mit einer Funktion oder einem Programm antworten
- Standardlücken sind verboten
- Das ist Code-Golf , also gewinnt die kürzeste richtige Antwort in Byte
- Die Gewinnerantwort wird in einer Woche ausgewählt
Viel Glück und möge die OOP bei dir sein!
Bestenliste
Das Stapel-Snippet am Ende dieses Beitrags generiert die Rangliste aus den Antworten a) als Liste der kürzesten Lösungen pro Sprache und b) als Gesamtrangliste.
Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:
## Language Name, N bytes
Wo N
ist die Größe Ihres Beitrags? Wenn Sie Ihren Score zu verbessern, Sie können alte Rechnungen in der Überschrift halten, indem man sich durch das Anschlagen. Zum Beispiel:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Wenn Sie mehrere Zahlen in Ihre Kopfzeile aufnehmen möchten (z. B. weil Ihre Punktzahl die Summe von zwei Dateien ist oder wenn Sie die Strafen für Interpreter-Flags separat auflisten möchten), stellen Sie sicher, dass die tatsächliche Punktzahl die letzte Zahl in der Kopfzeile ist:
## Perl, 43 + 2 (-p flag) = 45 bytes
Sie können den Namen der Sprache auch als Link festlegen, der dann im Snippet angezeigt wird:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
Criminal is a Person
. Person has a name
.
Does Criminal have a name?
gleichTrue
? Haben alle Objekte einen Namen?