Beni Bir OOP Golf!
Nesneye yönelik programlamanın iki önemli bileşeni kalıtım ve kompozisyondur. Birlikte, sorunları çözmek için basit ama güçlü bir sınıf hiyerarşisi oluşturmaya izin veriyorlar. Göreviniz, sınıf hiyerarşisine ilişkin bir dizi ifadeyi ayrıştırmak ve hiyerarşi ile ilgili soruları cevaplamaktır.
Giriş
Bir sınıf hiyerarşisine ilişkin, bir dizinden veya standart bir girişten okunan ve hangisi dilinize uygunsa, bir dizi ifade ve soru. Dosya seçeneğini kullanırsanız, dosya adı kodunuza ilk argüman olarak geçecektir (işlev argümanı veya komut satırı argümanı, hangisini seçerseniz). Format aşağıdaki gibidir:
<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
Girdi her zaman ifadeler, sonra sorular olacaktır. Tüm sınıf isimleri büyük harfle yazılmış bir İngilizce harfle ( A-Z
) başlayacak ve tüm üye isimleri küçük harfle yazılmış bir İngilizce harfle ( a-z
) başlayacaktır . Tüm adlar büyük / küçük harfe duyarlıdır - ABC123
ile aynı sınıf değildir Abc123
.
Herhangi bir konjonktürel miras olmayacak - eğer B
miras kalırsa A
, herhangi bir çocuğundan A
miras kalmayacak .B
B
Yalnızca sınıf adları, hiyerarşinin bir parçası olacaktır - gibi foo is a bar.
veya document has a name.
gerçekleşmeyen ifadeler .
Çıktı
Sorgulara cevap olarak, standart çıktıya yazılan veya fonksiyonunuzun geri dönüş değeri olarak verilen bir sıra dışı veya falsey değerleri. Bir soruyu cevaplamak için yeterli bilginiz yoksa (örneğin ifadelerde görmediğiniz isimleri içeren sorular), yanlış bir değerle cevaplayın.
Test Kılıfları
Dava 1:
Giriş:
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?
Çıktı:
True
True
False
Durum 2:
Giriş:
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?
Çıktı:
True
True
False
False
True
kurallar
- Bir işlev veya programla cevap verebilirsiniz.
- Standart boşluklar yasaktır
- Bu kod golf , bayt cinsinden en kısa sürede doğru cevap kazanır.
- Kazanan cevap bir hafta içinde seçilecek
İyi şanslar ve OOP seninle olsun!
Liderler Sıralaması
Bu yazının altındaki Yığın Parçacığı, a) dilindeki en kısa çözümlerin bir listesi olarak ve b) genel bir lider tablosu olarak cevaplardan lider tablosu oluşturur.
Cevabınızın göründüğünden emin olmak için, lütfen aşağıdaki Markdown şablonunu kullanarak cevabınızı bir başlık ile başlatın:
## Language Name, N bytes
Gönderinizin N
büyüklüğü nerede ? Puanınızı artırmak varsa, olabilir onları içinden vurarak, başlığa eski hesapları tutmak. Örneğin:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Başlığınıza birden fazla sayı eklemek istiyorsanız (örneğin, puanınız iki dosyanın toplamı olduğundan veya tercüman bayrağı cezalarını ayrı ayrı listelemek istediğiniz için), gerçek puanın başlıktaki son sayı olduğundan emin olun :
## Perl, 43 + 2 (-p flag) = 45 bytes
Dil adını, daha sonra pasajda görünecek bir bağlantı da yapabilirsiniz:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
Criminal is a Person
. Person has a name
.
Does Criminal have a name?
eşittirTrue
? Tüm nesnelerin bir adı var mı?