.
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]
Wersja bez golfa:
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]
Używam kompilatora Pythona SPL drsam94 , który ma kilka błędów (dlatego na przykład używamOpen your mind zamiast Open thy mindw wersji golfowej).
Aby uruchomić ten program, użyj:
$ python splc.py rld.spl > rld.c
$ gcc rld.c -o rld.exe
$ echo -n ":144,1'1" | ./rld
:4444,'
Jak to działa
SPL to ezoteryczny język programowania zaprojektowany tak, aby programy wyglądały jak sztuki Szekspira. Robi to za pomocą znaków jako zmiennych, a przetwarzanie odbywa się poprzez to, że znaki mówią sobie nawzajem.
The Decoding of the Lengths of Veronan Runs - A Drama of PPCG.
To jest tytuł sztuki; jest ignorowany przez kompilator.
Romeo, quite a character.
Juliet, Romeo's lover and multiplicand.
Tutaj deklarujemy zmienne używane w pozostałej części programu. Wszystko pomiędzy ,i .jest ignorowane przez kompilator. W tym przypadku deklarujemy Romeo, używane do przechowywania dekodowanej postaci, i Julietużywane do przechowywania długości przebiegu znaku.
Act I: In which the lengths of runs are decoded.
Tutaj deklarujemy pierwszy i jedyny akt w programie. Akty i sceny są jak etykiety; można do nich wskoczyć w dowolnym momencie za pomocą let us return to scene IIlub jakiejś jego wariantu. Używamy tylko jednego aktu, ponieważ jest on wystarczający dla naszych potrzeb. Ponownie, wszystko pomiędzy :i .jest ignorowane przez kompilator.
Scene I: A silent entrance.
Tutaj ogłaszamy pierwszą scenę. Sceny są ponumerowane cyframi rzymskimi: pierwsza to Scene Idruga Scene IIi tak dalej.
[Enter Romeo and Juliet]
To jest kierunek sceny; w nim mówimy zmiennym Romeoi Juliet, aby przyszły na „etap”. Tylko dwie zmienne mogą znajdować się jednocześnie na „scenie”; etap jest używany, aby kompilator mógł dowiedzieć się, która zmienna jest adresowana, a kiedy mówi. Ponieważ mamy tylko dwie zmienne, Romeo i Julia pozostaną na scenie przez cały czas trwania programu.
Scene II: In which neither Romeo nor Juliet believes the other open-minded.
Kolejna deklaracja sceny. Scena II zostanie przeskoczona w celu odkodowania kolejnego przebiegu.
Juliet:
Ta forma deklaracji oznacza, że Juliet zacznie mówić. Wszystko do następnego Romeo:, reżyserii scenicznej lub deklaracji sceny / aktu będzie wierszem wypowiedzianym przez Juliet, a zatem „ja” będzie odnosić się do Julii, „ty” / „ty” do Romeo itp.
Open your mind.
To polecenie przechowuje wartość porządkową pojedynczego znaku z STDIN w Romeo.
Is my mother jollier than thou?
W języku SPL rzeczowniki tłumaczą się na 1 lub -1 w zależności od tego, czy są dodatnie czy ujemne. W tym przypadku my mothertłumaczy się na 1. Przymiotniki (dodatnie lub ujemne) mnożą ich rzeczownik przez 2.
To jest pytanie; w tym Juliet pyta, czy my mother(AKA 1) jest „bardziej wesoły” niż Romeo. Porównania tłumaczą się na less than(jeśli są negatywne, jak worse) lub greater than(jeśli są pozytywne, jak jollier). Dlatego pytanie sprowadza się do Is 1 greater than you?.
Powodem, dla którego zadajemy to pytanie, jest wykrycie końca danych wejściowych. Ponieważ wartość EOFróżni się w zależności od platformy, ale zwykle jest mniejsza niż 1, używamy tego do jej wykrycia.
If so, we must proceed to scene IV.
Jeśli poprzednie pytanie zostanie ocenione true, przejdziemy do sceny IV - która jest po prostu końcem programu. Krótko mówiąc, jeśli wykryjemy EOF, kończymy program.
Romeo:
Teraz linia Romeo: „ja” i „ty” odnoszą się odpowiednio do Romea i Julii.
Open your mind.
Ponownie, to polecenie umieszcza wartość porządkową pojedynczego znaku z STDIN w Juliet, która w tym przypadku jest długością przebiegu znaku zapisanego w 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!
Ten jest zbyt długi, aby przejść do niego bardzo szczegółowo, ale zaufaj mi, że to się tłumaczy Juliet -= 48. Robimy to, ponieważ Juliet posiada wartość ASCII liczby, oraz ord('0') == 48; odejmując 48, tłumaczymy z wartości ASCII liczby na samą liczbę.
Scene III: In which Romeo snaps and brutally insults Juliet.
Kolejna deklaracja sceny. Ten jest dla pętli, w której wielokrotnie drukujemy wartość znaku Romeo, Julietrazy.
Juliet:
Speak thy mind.
To stwierdzenie powoduje, że Romeo wypisuje swoją wartość jako postać; to znaczy, dowolna wartość znaku wcześniej zapisana w Romeo jest teraz wyprowadzana.
Romeo:
Thou art the sum of thyself and a hog!
Wieprz jest rzeczownikiem przeczącym, więc a hogtłumaczy się na -1; dlatego oświadczenie to ocenia Juliet -= 1.
Art thou as rotten as nothing?
Romeo pyta, czy Julia jest „tak zepsuta jak”, czy równa 0.
If so, let us return to scene II.
Jeśli wartość Juliet wynosi 0, wracamy do sceny II, aby dekodować długość przebiegu innej postaci.
Let us return to scene III.
W przeciwnym razie powrócimy do sceny III, aby ponownie przedstawić postać Romea.
Scene IV: Finale.
[Exeunt]
Ta ostateczna deklaracja sceny jest tylko znacznikiem końca programu. [Exeunt]Kierunek etap jest konieczny, aby uzyskać kompilator faktycznie generuje ostateczną scenę.