.
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]
Version non golfée:
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]
J'utilise le compilateur SPL Python drsam94 , qui a quelques bugs ( ce qui explique pourquoi, par exemple, je l' utilise au Open your mind
lieu de Open thy mind
la version golfed).
Pour exécuter ce programme, utilisez:
$ python splc.py rld.spl > rld.c
$ gcc rld.c -o rld.exe
$ echo -n ":144,1'1" | ./rld
:4444,'
Comment ça fonctionne
SPL est un langage de programmation ésotérique conçu pour que les programmes ressemblent à des pièces de Shakespeare. Il le fait en utilisant des caractères comme variables, et le traitement est effectué en demandant aux personnages de se dire des choses.
The Decoding of the Lengths of Veronan Runs - A Drama of PPCG.
C'est le titre de la pièce; il est ignoré par le compilateur.
Romeo, quite a character.
Juliet, Romeo's lover and multiplicand.
Ici, nous déclarons les variables utilisées dans le reste du programme. Tout entre ,
et.
est ignoré par le compilateur. Dans ce cas, nous déclarons Romeo
, utilisé pour contenir le caractère en cours de décodage, et Juliet
, utilisé pour contenir la longueur du caractère.
Act I: In which the lengths of runs are decoded.
Nous déclarons ici le premier et le seul acte du programme. Les actes et les scènes sont comme des étiquettes; ils peuvent être sautés à tout moment en utilisantlet us return to scene II
ou une variante de cela. Nous n'utilisons qu'un seul acte, car il suffit à nos besoins. Encore une fois, tout ce qui se trouve entre :
et .
est ignoré par le compilateur.
Scene I: A silent entrance.
Ici, nous déclarons la première scène. Les scènes sont numérotées en chiffres romains: la première estScene I
, la seconde Scene II
, etc.
[Enter Romeo and Juliet]
Ceci est une mise en scène; on y raconteRomeo
Juliet
variables et de venir sur la "scène". Seules deux variables peuvent être sur la "scène" à la fois; l'étape est utilisée pour que le compilateur puisse déterminer quelle variable s'adresse à qui quand ils parlent. Parce que nous n'avons que deux variables, Roméo et Juliette resteront sur scène pendant toute la durée du programme.
Scene II: In which neither Romeo nor Juliet believes the other open-minded.
Une autre déclaration de scène. La scène II sera sautée afin de décoder une autre longueur d'exécution.
Juliet:
Cette forme de déclaration signifie que Juliette va commencer à parler. Tout jusqu'à la prochaineRomeo:
, mise en scène ou déclaration de scène / acte sera une phrase prononcée par Juliette, et donc "moi" fera référence à Juliette, "vous" / "tu" à Roméo, etc.
Open your mind.
Cette commande stocke la valeur ordinale d'un caractère unique de STDIN dans Romeo
.
Is my mother jollier than thou?
En SPL, les noms se traduisent par 1 ou -1 selon qu'ils sont positifs ou négatifs. Dans ce cas,my mother
traduit par 1. Les adjectifs (positifs ou négatifs) multiplient leur nom par 2.
C'est une question; Juliet y demande si my mother
(AKA 1) est "plus joyeux" que Roméo. Les comparatifs se traduisent par less than
(s'ils sont négatifs, comme worse
) ou greater than
(s'ils sont positifs, comme jollier
). Par conséquent, cette question se résume à Is 1 greater than you?
.
La raison pour laquelle nous posons cette question est de détecter la fin de l'entrée. Étant donné que la valeur de EOF
varie selon la plate-forme, mais est généralement inférieure à 1, nous l'utilisons pour la détecter.
If so, we must proceed to scene IV.
Si la question précédente est évaluée true
, nous passons à la scène IV - qui est tout simplement la fin du programme. En bref, si nous détectons un EOF, nous terminons le programme.
Romeo:
C'est maintenant la ligne de Roméo: «moi» et «vous» se réfèrent respectivement à Roméo et Juliette.
Open your mind.
Encore une fois, cette instruction place la valeur ordinale d'un seul caractère de STDIN dans Juliet, qui dans ce cas est la longueur du caractère stocké dans 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!
Celui-ci est trop long pour être détaillé, mais croyez-moi, cela se traduit par Juliet -= 48
. Nous faisons cela parce que Juliette détient la valeur ASCII d'un chiffre, et ord('0') == 48
; en soustrayant 48, nous traduisons de la valeur ASCII d'un nombre au nombre lui-même.
Scene III: In which Romeo snaps and brutally insults Juliet.
Une autre déclaration de scène. Celui-ci est pour la boucle dans laquelle nous imprimons à plusieurs reprises la valeur de caractère de Romeo
,Juliet
times.
Juliet:
Speak thy mind.
Cette déclaration fait que Roméo imprime sa valeur en tant que personnage; c'est-à-dire que la valeur de caractère précédemment stockée dans Romeo est maintenant sortie.
Romeo:
Thou art the sum of thyself and a hog!
Un porc est un nom négatif, donc se a hog
traduit par -1; par conséquent, cette déclaration est évaluée Juliet -= 1
.
Art thou as rotten as nothing?
Roméo demande ici si Juliette est "aussi pourrie que" ou égale à 0.
If so, let us return to scene II.
Si la valeur de Juliette est 0, nous rebouclons vers la scène II pour décoder la durée de vie d'un autre personnage.
Let us return to scene III.
Sinon, nous retournons à la scène III pour sortir à nouveau le personnage de Roméo.
Scene IV: Finale.
[Exeunt]
Cette déclaration de scène finale n'est qu'un marqueur de la fin du programme. La [Exeunt]
direction de la scène est nécessaire pour que le compilateur génère réellement la scène finale.