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 - це езоланг, створений так, щоб виглядати як п'єси Шекспіра. Позитивні іменники мають значення 1 (тут використовується кішка ), а негативні іменники - -1 (жоден не вживався, але свиня - одна з них). Прикметники модифікують константу, множивши її на 2.
N.
Все до першої крапки - це заголовок і не має значення.
Puck,. row counter
Page,. column counter
Ford,. input
Ajax,. temp
Символи є цілими змінними, кожен з них також має стек, але мені не потрібно було використовувати цю функцію.
Act I:.
Scene I:.
Дії та сцени використовуються як мітки goto
[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:
input = [номер введення];
рядок = 0 - вхід + 1;
Сцена2:
col = 0 - вхід + 1;
Сцена3:
temp = рядок * col;
якщо (temp == 0) {
temp = '+';
} else {
temp = '';
}
путчар (темп);
Сторінка = Сторінка + 1;
if (Page! = Ford) goto Scene3;
Аякс = 10;
путчар (Аякс);
Шайба = шайба + 1;
якщо (Puck! = Ford) goto Scene2;