.
Ajax,.
Ford,.
Act I:.
Scene I:.
[Enter Ajax and Ford]
Scene II:.
Ford:
Open your mind.Is sky nicer than you?If so, let us return to scene IV.
Ajax:
Open your mind.You is sum you and sum big big big big big big pig and big big big big cat!
Scene III:.
Ford:
Speak thy mind.
Ajax:
You is sum you and pig!Is you as big as zero?If so, let us return to scene II.Let us return to scene III.
Scene IV:.
[Exeunt]
Безголовая версия:
The Decoding of the Lengths of Veronan Runs - A Drama of PPCG.
Romeo, quite a character.
Juliet, Romeo's lover and multiplicand.
Act I: In which the lengths of runs are decoded.
Scene I: A silent entrance.
[Enter Romeo and Juliet]
Scene II: In which neither Romeo nor Juliet believes the other open-minded.
Juliet:
Open your mind. Is my mother jollier than thou? If so,
we must proceed to scene IV.
Romeo:
Open your mind. Thou art the sum of thyself and the sum of my good aunt and
the difference between nothing and the quotient of the square of twice the sum
of thy foul fat-kidneyed goat and thy death and thy evil variable!
Scene III: In which Romeo snaps and brutally insults Juliet.
Juliet:
Speak thy mind.
Romeo:
Thou art the sum of thyself and a hog! Art thou as rotten as nothing? If so,
let us return to scene II. Let us return to scene III.
Scene IV: Finale.
[Exeunt]
Я использую drsam94 Python SPL компилятор , в котором есть несколько ошибок (именно поэтому, например, я использую Open your mind
вместо Open thy mind
версии для гольфа).
Чтобы запустить эту программу, используйте:
$ python splc.py rld.spl > rld.c
$ gcc rld.c -o rld.exe
$ echo -n ":144,1'1" | ./rld
:4444,'
Как это устроено
SPL - это эзотерический язык программирования, разработанный для того, чтобы программы выглядели как пьесы Шекспира. Он делает это, используя символы в качестве переменных, а обработка выполняется, когда персонажи говорят что-то друг другу.
The Decoding of the Lengths of Veronan Runs - A Drama of PPCG.
Это название пьесы; это игнорируется компилятором.
Romeo, quite a character.
Juliet, Romeo's lover and multiplicand.
Здесь мы объявляем переменные, используемые в остальной части программы. Все между ,
и .
игнорируется компилятором. В этом случае мы объявляем Romeo
, используется для хранения декодируемого символа, и Juliet
используется для хранения длины цикла символа.
Act I: In which the lengths of runs are decoded.
Здесь мы объявляем первый и единственный акт в программе. Акты и сцены похожи на ярлыки; к ним можно перейти в любое время, используя let us return to scene II
или какой-либо вариант этого. Мы используем только один акт, потому что этого достаточно для наших нужд. Опять же, все, что находится между :
и .
игнорируется компилятором.
Scene I: A silent entrance.
Здесь мы объявляем первую сцену. Сцены нумеруются римскими цифрами: первая есть Scene I
, вторая Scene II
и так далее.
[Enter Romeo and Juliet]
Это сценическое направление; в нем, мы говорим о Romeo
и Juliet
переменные прийти на «стадии». Только две переменные могут быть на «сцене» одновременно; Этап используется для того, чтобы компилятор мог выяснить, к какой переменной относится, когда он говорит. Поскольку у нас есть только две переменные, Ромео и Джульетта останутся на сцене на протяжении всей программы.
Scene II: In which neither Romeo nor Juliet believes the other open-minded.
Объявление другой сцены. На сцену II будет прыгать, чтобы декодировать другую длину цикла.
Juliet:
Эта форма заявления означает, что Джульетта начнет говорить. Все до следующего Romeo:
, направления сцены или объявления сцены / акта будет строкой, на которой говорит Джульетта, и, таким образом, «я» будет относиться к Джульетте, «ты» / «ты» к Ромео и т. Д.
Open your mind.
Эта команда сохраняет порядковый номер одного символа из STDIN в Romeo
.
Is my mother jollier than thou?
В SPL существительные переводятся в 1 или -1 в зависимости от того, являются ли они положительными или отрицательными. В этом случае my mother
переводится как 1. Прилагательные (положительные или отрицательные) умножают свое существительное на 2.
Это вопрос; в этом Джульетта спрашивает, является ли my mother
(AKA 1) «веселее», чем Ромео. Сравнительные данные либо переводятся в less than
(если они отрицательные, как worse
) или greater than
(если они положительные, как jollier
). Поэтому этот вопрос сводится к Is 1 greater than you?
.
Причина, по которой мы задаем этот вопрос, заключается в обнаружении конца ввода. Поскольку значение EOF
зависит от платформы, но обычно меньше 1, мы используем его для его обнаружения.
If so, we must proceed to scene IV.
Если предыдущий вопрос был оценен true
, мы переходим к сцене IV, которая является просто концом программы. Короче говоря, если мы обнаруживаем EOF, мы заканчиваем программу.
Romeo:
Теперь это линия Ромео: «я» и «ты» относятся к Ромео и Джульетте соответственно.
Open your mind.
Опять же, этот оператор помещает порядковое значение одного символа из STDIN в Джульетту, которая в этом случае является длиной цикла символа, хранящегося в Romeo
.
Thou art the sum of thyself and the sum of my good aunt and the difference
between nothing and the quotient of the square of twice the sum of thy foul
fat-kidneyed goat and thy death and thy evil variable!
Это слишком долго, чтобы переходить к деталям, но поверьте мне, что это переводится как Juliet -= 48
. Мы делаем это потому, что Джульетта имеет значение ASCII для числа, и ord('0') == 48
; вычитая 48, мы переводим значение ASCII числа в само число.
Scene III: In which Romeo snaps and brutally insults Juliet.
Объявление другой сцены. Это для цикла, в котором мы многократно печатаем значение символа Romeo
, Juliet
раз.
Juliet:
Speak thy mind.
Это утверждение заставляет Ромео печатать свою ценность как персонажа; то есть, какое бы значение символа не было ранее сохранено в Romeo, теперь выводится.
Romeo:
Thou art the sum of thyself and a hog!
Свинья является отрицательным существительным, поэтому a hog
переводится как -1; следовательно, это утверждение оценивается как Juliet -= 1
.
Art thou as rotten as nothing?
Ромео здесь спрашивает, "Джульетта" так же гнилая, как ", или равна 0.
If so, let us return to scene II.
Если значение Джульетты равно 0, мы возвращаемся к сцене II для декодирования длины пробега другого персонажа.
Let us return to scene III.
Иначе, мы возвращаемся к сцене III, чтобы снова вывести персонажа Ромео.
Scene IV: Finale.
[Exeunt]
Это окончательное объявление сцены является просто маркером конца программы. [Exeunt]
Режиссура необходимо получить компилятор на самом деле создать финальную сцену.