Golf Me A ООП!
Двумя важными компонентами объектно-ориентированного программирования являются наследование и компоновка. Вместе они позволяют создавать простые, но мощные иерархии классов для решения проблем. Ваша задача - проанализировать ряд утверждений об иерархии классов и ответить на вопросы об иерархии.
вход
Серия утверждений и вопросов об иерархии классов, прочитанных из файла или стандартного ввода, в зависимости от того, что лучше для вашего языка. Если вы используете опцию file, имя файла будет передано в качестве первого аргумента в ваш код (аргумент функции или аргумент командной строки, в зависимости от того, что вы выберете). Формат выглядит следующим образом:
<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
На входе всегда будут заявления, а затем вопросы. Все имена классов начинаются с заглавной английской буквы ( A-Z
), а все имена членов начинаются со строчной английской буквы ( a-z
). Все имена чувствительны к регистру - ABC123
это не тот же класс, что и Abc123
.
Не будет никакого циклического наследования - если B
наследует от A
, A
не наследует от B
кого-либо из B
детей.
Только имена классов будут частью иерархии - такие операторы, как foo is a bar.
или document has a name.
не будут встречаться.
Выход
Ряд истинных или ложных значений, как ответы на запросы, записанные в стандартный вывод или как возвращаемое значение вашей функции. Если у вас недостаточно информации для ответа на вопрос (например, вопросы с именами, которых вы не видели в утверждениях), ответьте с ошибочным значением.
Тестовые случаи
Случай 1:
Входные данные:
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?
Выход:
True
True
False
Случай 2:
Входные данные:
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?
Выход:
True
True
False
False
True
правила
- Вы можете ответить с помощью функции или программы
- Стандартные лазейки запрещены
- Это код-гольф , поэтому выигрывает кратчайший правильный ответ в байтах
- Победивший ответ будет выбран через неделю
Удачи, и да будет с вами ООП!
Leaderboard
Фрагмент стека в нижней части этого поста создает таблицу лидеров из ответов а) в виде списка кратчайшего решения для каждого языка и б) в качестве общей таблицы лидеров.
Чтобы убедиться, что ваш ответ обнаружен, начните его с заголовка, используя следующий шаблон уценки:
## Language Name, N bytes
где N
размер вашего представления. Если вы улучшите свой счет, вы можете сохранить старые результаты в заголовке, вычеркнув их. Например:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Если вы хотите включить в заголовок несколько чисел (например, потому что ваш результат равен сумме двух файлов или вы хотите перечислить штрафы за флаг интерпретатора отдельно), убедитесь, что фактический результат является последним числом в заголовке:
## Perl, 43 + 2 (-p flag) = 45 bytes
Вы также можете сделать имя языка ссылкой, которая будет отображаться во фрагменте кода:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
Criminal is a Person
. Person has a name
,
Does Criminal have a name?
равняетсяTrue
? У всех объектов есть имя?