.
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]
Versione non golfata:
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]
Sto usando il compilatore Python SPL di drsam94 , che ha alcuni bug (motivo per cui, ad esempio, utilizzo Open your mindinvece diOpen thy mind nella versione golfata).
Per eseguire questo programma, utilizzare:
$ python splc.py rld.spl > rld.c
$ gcc rld.c -o rld.exe
$ echo -n ":144,1'1" | ./rld
:4444,'
Come funziona
SPL è un linguaggio di programmazione esoterico progettato per far sembrare i programmi come i giochi di Shakespeare. Lo fa usando i caratteri come variabili e l'elaborazione viene eseguita facendo in modo che i personaggi si dicano l'un l'altro.
The Decoding of the Lengths of Veronan Runs - A Drama of PPCG.
Questo è il titolo dell'opera teatrale; viene ignorato dal compilatore.
Romeo, quite a character.
Juliet, Romeo's lover and multiplicand.
Qui stiamo dichiarando le variabili utilizzate nel resto del programma. Tutto tra ,e .viene ignorato dal compilatore. In questo caso, dichiariamo Romeo, usato per contenere il personaggio in fase di decodifica e Juliet, usato per contenere la lunghezza del personaggio.
Act I: In which the lengths of runs are decoded.
Qui dichiariamo il primo e unico atto nel programma. Gli atti e le scene sono come etichette; possono essere saltati in qualsiasi momento usando let us return to scene IIo qualche variante di quello. Usiamo solo un atto, perché è sufficiente per le nostre esigenze. Ancora una volta, qualsiasi cosa tra :e .viene ignorata dal compilatore.
Scene I: A silent entrance.
Qui dichiariamo la prima scena. Le scene sono numerate in numeri romani: il primo è Scene I, il secondo Scene IIe così via.
[Enter Romeo and Juliet]
Questa è una direzione scenica; in esso diciamo alle variabili Romeoe Julietdi entrare nello "stage". Solo due variabili possono essere sullo "stage" contemporaneamente; lo stage viene utilizzato in modo che il compilatore possa capire quale variabile si sta indirizzando e quando parlano. Poiché abbiamo solo due variabili, Romeo e Giulietta rimarranno sul palco per tutta la durata del programma.
Scene II: In which neither Romeo nor Juliet believes the other open-minded.
Un'altra dichiarazione di scena. Verrà saltata la scena II per decodificare un'altra lunghezza di esecuzione.
Juliet:
Questa forma di dichiarazione significa che Juliet inizierà a parlare. Tutto fino alla prossima Romeo:, direzione del palcoscenico o dichiarazione di scena / atto sarà una linea pronunciata da Giulietta, e quindi "io" si riferirà a Giulietta, "tu" / "tu" a Romeo, ecc.
Open your mind.
Questo comando memorizza il valore ordinale del singolo carattere di STDIN in Romeo.
Is my mother jollier than thou?
In SPL, i sostantivi si traducono in 1 o -1 a seconda che siano positivi o negativi. In questo caso, si my mothertraduce in 1. Gli aggettivi (positivi o negativi) moltiplicano il loro nome per 2.
Questa è una domanda; in esso, Juliet chiede se my mother(AKA 1) è "più allegro" di Romeo. I comparativi si traducono in less than(se sono negativi, come worse) o greater than(se sono positivi, come jollier). Pertanto, questa domanda si riduce a Is 1 greater than you?.
Il motivo per cui facciamo questa domanda è rilevare la fine dell'input. Poiché il valore di EOFvaria in base alla piattaforma, ma di solito è inferiore a 1, lo utilizziamo per rilevarlo.
If so, we must proceed to scene IV.
Se la domanda precedente è stata valutata true, passiamo alla scena IV, che è semplicemente la fine del programma. In breve, se rileviamo un EOF, chiudiamo il programma.
Romeo:
Ora è la linea di Romeo: "io" e "tu" si riferiscono rispettivamente a Romeo e Giulietta.
Open your mind.
Ancora una volta, questa affermazione inserisce il valore ordinale di un singolo carattere da STDIN in Juliet, che in questo caso è la lunghezza del personaggio memorizzato 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!
Questo è troppo lungo per essere esaminato nei minimi dettagli, ma fidati di me in ciò che si traduce Juliet -= 48. Lo facciamo perché Juliet detiene il valore ASCII di un numero e ord('0') == 48; sottraendo 48, traduciamo dal valore ASCII di un numero al numero stesso.
Scene III: In which Romeo snaps and brutally insults Juliet.
Un'altra dichiarazione di scena. Questo è per il ciclo in cui stampiamo ripetutamente il valore del carattere di Romeo, Julietvolte.
Juliet:
Speak thy mind.
Questa affermazione induce Romeo a stampare il suo valore come personaggio; cioè, qualunque sia il valore del personaggio precedentemente memorizzato in Romeo viene ora emesso.
Romeo:
Thou art the sum of thyself and a hog!
Un maiale è un sostantivo negativo, quindi si a hogtraduce in -1; pertanto, questa affermazione valuta Juliet -= 1.
Art thou as rotten as nothing?
Romeo qui chiede se Juliet è "marcio come", o uguale a, 0.
If so, let us return to scene II.
Se il valore di Giulietta è 0, torniamo alla scena II per decodificare la lunghezza di un altro personaggio.
Let us return to scene III.
Altrimenti, torniamo alla scena III per dare di nuovo in uscita il personaggio di Romeo.
Scene IV: Finale.
[Exeunt]
Questa dichiarazione finale della scena è solo un indicatore per la fine del programma. La [Exeunt]direzione del palcoscenico è necessaria affinché il compilatore generi effettivamente la scena finale.