Golf Me OOP!
Dwa ważne elementy programowania obiektowego to dziedziczenie i kompozycja. Razem pozwalają na tworzenie prostych, ale potężnych hierarchii klas w celu rozwiązywania problemów. Twoim zadaniem jest przeanalizowanie szeregu stwierdzeń dotyczących hierarchii klas i udzielenie odpowiedzi na pytania dotyczące hierarchii.
Wkład
Seria stwierdzeń i pytań dotyczących hierarchii klas, czytanych z pliku lub standardowego wejścia, w zależności od tego, który język jest najlepszy. Jeśli użyjesz opcji pliku, nazwa pliku zostanie przekazana jako pierwszy argument do Twojego kodu (argument funkcji lub argument wiersza poleceń, zależnie od tego, co wybierzesz). Format jest następujący:
<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
Wkładem będą zawsze stwierdzenia, a następnie pytania. Wszystkie nazwy klas A-Z
zaczynają się od dużej litery angielskiej ( ), a wszystkie nazwy członków zaczynają się od małej litery angielskiej ( a-z
). W nazwach rozróżniana ABC123
jest wielkość liter - nie jest to ta sama klasa, co Abc123
.
Nie będzie żadnego cyklicznego dziedziczenia - jeśli B
odziedziczy po nim A
, A
nie odziedziczy po nim B
ani żadnym z B
jego dzieci.
Tylko nazwy klas będą stanowić część hierarchii - instrukcje takie jak foo is a bar.
lub document has a name.
nie będą występować.
Wydajność
Szereg prawdziwych lub falsey wartości, jako odpowiedzi na zapytania zapisane na standardowym wyjściu lub jako wartość zwracana przez twoją funkcję. Jeśli nie masz wystarczających informacji, aby odpowiedzieć na pytanie (np. Pytania dotyczące nazwisk, których nie widziałeś w wypowiedziach), odpowiedz z wartością falsey.
Przypadki testowe
Przypadek 1:
Wkład:
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?
Wydajność:
True
True
False
Przypadek 2:
Wkład:
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?
Wydajność:
True
True
False
False
True
Zasady
- Możesz odpowiedzieć za pomocą funkcji lub programu
- Standardowe luki są zabronione
- To jest golf golfowy , więc wygrywa najkrótsza poprawna odpowiedź w bajtach
- Zwycięska odpowiedź zostanie wybrana za tydzień
Powodzenia i niech OOP będzie z tobą!
Tabela liderów
Fragment kodu na dole tego postu generuje tabelę wyników na podstawie odpowiedzi a) jako lista najkrótszych rozwiązań dla każdego języka oraz b) jako ogólna tabela wyników.
Aby upewnić się, że Twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown:
## Language Name, N bytes
gdzie N
jest rozmiar twojego zgłoszenia. Jeśli poprawić swój wynik, to może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Jeśli chcesz umieścić w nagłówku wiele liczb (np. Ponieważ twój wynik jest sumą dwóch plików lub chcesz osobno wymienić kary za flagi tłumacza), upewnij się, że rzeczywisty wynik jest ostatnią liczbą w nagłówku:
## Perl, 43 + 2 (-p flag) = 45 bytes
Możesz także ustawić nazwę języka jako link, który pojawi się we fragmencie:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
Criminal is a Person
. Person has a name
.
Does Criminal have a name?
równeTrue
? Czy wszystkie obiekty mają nazwę?