Golf Me An OOP!
Dua komponen penting dari pemrograman berorientasi objek adalah pewarisan dan komposisi. Bersama-sama, mereka memungkinkan untuk menciptakan hierarki kelas yang sederhana namun kuat untuk menyelesaikan masalah. Tugas Anda adalah mengurai serangkaian pernyataan tentang hierarki kelas, dan menjawab pertanyaan tentang hierarki.
Memasukkan
Serangkaian pernyataan dan pertanyaan tentang hierarki kelas, baca dari file atau input standar, mana yang terbaik untuk bahasa Anda. Jika Anda menggunakan opsi file, nama file akan diteruskan sebagai argumen pertama ke kode Anda (argumen fungsi atau argumen baris perintah, mana pun yang Anda pilih). Formatnya adalah sebagai berikut:
<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
Masukan akan selalu berupa pernyataan, lalu pertanyaan. Semua nama kelas akan dimulai dengan huruf bahasa Inggris huruf besar ( A-Z
), dan semua nama anggota akan dimulai dengan huruf bahasa Inggris huruf kecil ( a-z
). Semua nama peka terhadap huruf besar-kecil - ABC123
tidak sama dengan kelas Abc123
.
Tidak akan ada warisan siklus - jika B
mewarisi dari A
, A
tidak akan mewarisi dari B
atau dari B
anak-anak.
Hanya nama kelas yang akan menjadi bagian dari hierarki - pernyataan seperti foo is a bar.
atau document has a name.
tidak akan muncul.
Keluaran
Serangkaian nilai kebenaran atau kesalahan, sebagai jawaban atas pertanyaan, ditulis ke output standar atau sebagai nilai pengembalian fungsi Anda. Jika Anda tidak memiliki informasi yang cukup untuk menjawab pertanyaan (mis. Pertanyaan yang melibatkan nama yang belum Anda lihat dalam pernyataan), jawab dengan nilai falsey.
Uji Kasus
Kasus 1:
Memasukkan:
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?
Keluaran:
True
True
False
Kasus 2:
Memasukkan:
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?
Keluaran:
True
True
False
False
True
Aturan
- Anda dapat menjawab dengan fungsi atau program
- Celah standar dilarang
- Ini adalah kode-golf , jadi jawaban terpendek yang benar dalam byte menang
- Jawaban yang menang akan dipilih dalam satu minggu
Semoga beruntung, dan semoga OOP itu menyertai Anda!
Papan peringkat
Cuplikan Stack di bagian bawah posting ini menghasilkan leaderboard dari jawaban a) sebagai daftar solusi terpendek per bahasa dan b) sebagai leaderboard keseluruhan.
Untuk memastikan bahwa jawaban Anda muncul, silakan mulai jawaban Anda dengan tajuk utama, menggunakan templat Penurunan harga berikut:
## Language Name, N bytes
di mana N
ukuran kiriman Anda. Jika Anda meningkatkan skor Anda, Anda dapat menyimpan skor lama di headline, dengan mencoretnya. Contohnya:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Jika Anda ingin memasukkan beberapa angka dalam tajuk Anda (mis. Karena skor Anda adalah jumlah dari dua file atau Anda ingin membuat daftar hukuman penterjemah secara terpisah), pastikan bahwa skor sebenarnya adalah angka terakhir di tajuk:
## Perl, 43 + 2 (-p flag) = 45 bytes
Anda juga dapat membuat nama bahasa menjadi tautan yang kemudian akan muncul di cuplikan:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
Criminal is a Person
. Person has a name
.
Does Criminal have a name?
setaraTrue
? Apakah semua benda memiliki nama?