N.Puck,.Page,.Ford,.Ajax,.Act I:.Scene I:.[Enter Puck and Ford]Puck:Listen to thy heart!Ford:You is the difference between a cat and I.Scene V:.[Exeunt][Enter Page and Ajax]Ajax:You is the difference between a cat and Ford.Scene X:.Page:You is the product of Puck and I.Is you as big as zero?If so,you is the sum of the sum of the sum of a big big big big big cat and a big big big cat and a big cat and a cat.If not,you big big big big big cat.Speak thy mind!Ajax:You is the sum of you and a cat.Is you as big as Ford?If not,let us return to Scene X.Page:You is the sum of a big big big cat and a big cat.Speak thy mind![Exit Page][Enter Puck]Ajax:You is the sum of you and a cat.Is you as big as Ford?If not,let us return to Scene V.[Exeunt]
Попробуйте онлайн!
Изменить: сделал ответ совместимым с официальной реализацией SPL - я не мог заставить его работать раньше.
Гольф 6 байтов, потому что номера сцен не должны быть последовательными.
Объяснение :
SPL - esolang, разработанный, чтобы быть похожим на пьесы Шекспира. Положительные существительные имеют значение 1 (здесь используется cat ), а отрицательные существительные имеют значение -1 (ни один не использовался, но свинья - одна из них). Прилагательные изменяют константу, умножая ее на 2.
N.
Все до первой точки является названием и не имеет значения.
Puck,. row counter
Page,. column counter
Ford,. input
Ajax,. temp
Символы являются целочисленными переменными, у каждого из них также есть стек, но мне не нужно было использовать эту функцию.
Act I:.
Scene I:.
Акты и сцены используются в качестве меток
[Enter Puck and Ford]
Это полезно, только если на сцене одновременно находятся два персонажа.
Puck:Listen to thy heart!
Читает число и заставляет Форд запомнить это.
Ford:You is the difference between a cat and I.
Как вы можете видеть, английский действует в SPL. Это делает ценность Пака "разной между кошкой и мной". Но что это значит? cat
это положительное существительное, так что это Puck = 1 - Ford
.
Scene II:.
[Exeunt]
Exeunt - это просто множественное число «выхода», и без аргументов означает, что все на сцене выходят.
[Enter Page and Ajax]
Ajax:You is the difference between a cat and Ford.
Это также, Page = 1 - Ford
но это говорит другой актер, так I
что будет неправильно. Поскольку это цикл, я не могу просто скопировать значение Puck
.
Scene III:.
Page:You is the product of Puck and I.
Довольно просто сейчас. Ajax = Puck * Page
,
Is you as big as zero?
«as [adj] as» - ==
оператор.
If so,you is the sum of the sum of the sum of a big big big big big cat and a big big big cat and a big cat and a cat.
Если Ajax == 0 ... "кошка" - 1, "большая кошка" - 2, "большая большая кошка" - 4 и так далее. После подстановки простых констант мы получаем «сумму суммы 32 и 8 и 2 и 1» -> «сумму суммы 40 и 2 и 1» -> «сумму 42 и 1» -> «43», что является ASCII для +.
If not,you fat fat fat fat fat cat.
иначе это просто «жир, жир, жир, жир, кошка», поэтому Ajax получает значение 32, ASCII для пространства.
Speak thy mind!
Это команда для вывода символа.
Ajax:
You sum you and cat.Is you as big as Ford?If not,let us return to Scene III.
Это конструкция цикла. «Вы суммируете себя и кошку» if(Page != Ford) goto Scene III
. Остальная часть программы использует те же компоненты, так что вот более читаемая версия псевдокода:
Сцена 1:
вход = [номер входа];
строка = 0 - вход + 1;
СЦЕНЫ2:
col = 0 - вход + 1;
SCENE3:
temp = row * col;
if (temp == 0) {
temp = '+';
} Еще {
temp = '';
}
putchar (температура);
Страница = Страница + 1;
if (Page! = Ford) перейти к Scene3;
Аякс = 10;
putchar (Аякс);
Шайба = шайба + 1;
if (Puck! = Ford) перейти к сцене 2;