.
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]
Versi tidak disatukan:
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]
Saya menggunakan kompiler Python SPL drsam94 , yang memiliki beberapa bug (itulah sebabnya, misalnya, saya gunakan Open your mind
sebagai ganti Open thy mind
dalam versi golf).
Untuk menjalankan program ini, gunakan:
$ python splc.py rld.spl > rld.c
$ gcc rld.c -o rld.exe
$ echo -n ":144,1'1" | ./rld
:4444,'
Bagaimana itu bekerja
SPL adalah bahasa pemrograman esoteris yang dirancang untuk membuat program terlihat seperti drama Shakespeare. Ini dilakukan dengan menggunakan karakter sebagai variabel, dan pemrosesan dilakukan dengan meminta karakter mengatakan sesuatu satu sama lain.
The Decoding of the Lengths of Veronan Runs - A Drama of PPCG.
Ini adalah judul drama; itu diabaikan oleh kompiler.
Romeo, quite a character.
Juliet, Romeo's lover and multiplicand.
Di sini kita mendeklarasikan variabel yang digunakan di sisa program. Semuanya antara ,
dan .
diabaikan oleh kompiler. Dalam kasus ini, kami mendeklarasikan Romeo
, digunakan untuk menahan karakter yang sedang diterjemahkan, dan Juliet
, digunakan untuk menahan panjang run karakter.
Act I: In which the lengths of runs are decoded.
Di sini kami menyatakan tindakan pertama dan satu-satunya dalam program ini. Kisah dan adegan seperti label; mereka dapat dilompati kapan saja dengan menggunakan let us return to scene II
atau beberapa varian itu. Kami hanya menggunakan satu tindakan, karena itu cukup untuk kebutuhan kita. Sekali lagi, apa pun di antara :
dan .
diabaikan oleh kompiler.
Scene I: A silent entrance.
Di sini kita mendeklarasikan adegan pertama. Adegan diberi nomor dalam angka Romawi: yang pertama adalah Scene I
, yang kedua Scene II
, dan seterusnya.
[Enter Romeo and Juliet]
Ini adalah arah panggung; di dalamnya, kita memberi tahu Romeo
dan Juliet
variabel untuk datang ke "panggung". Hanya dua variabel yang bisa berada di "panggung" sekaligus; tahap ini digunakan sehingga kompiler dapat mengetahui variabel mana yang menangani yang mana ketika mereka berbicara. Karena kami hanya memiliki dua variabel, Romeo dan Juliet akan tetap di atas panggung selama jangka waktu program.
Scene II: In which neither Romeo nor Juliet believes the other open-minded.
Deklarasi adegan lain. Adegan II akan dilompat ke untuk memecahkan kode run-length lain.
Juliet:
Bentuk pernyataan ini berarti bahwa Juliet akan mulai berbicara. Segala sesuatu sampai Romeo:
deklarasi panggung, adegan, atau adegan / tindakan selanjutnya akan menjadi garis yang diucapkan oleh Juliet, dan dengan demikian "aku" akan merujuk ke Juliet, "kamu" / "kamu" ke Romeo, dll.
Open your mind.
Perintah ini menyimpan nilai ordinal karakter tunggal dari STDIN di Romeo
.
Is my mother jollier than thou?
Dalam SPL, kata benda diterjemahkan menjadi 1 atau -1 tergantung pada apakah mereka positif atau negatif. Dalam hal ini, my mother
diterjemahkan menjadi 1. Kata sifat (positif atau negatif) kalikan kata benda mereka dengan 2.
Ini adalah sebuah pertanyaan; di dalamnya, Juliet bertanya apakah my mother
(AKA 1) "jollier" daripada Romeo. Komparatif dapat diterjemahkan menjadi less than
(jika negatif, suka worse
) atau greater than
(jika positif, suka jollier
). Oleh karena itu, pertanyaan ini sampai pada Is 1 greater than you?
.
Alasan kami mengajukan pertanyaan ini adalah untuk mendeteksi akhir input. Karena nilai EOF
bervariasi berdasarkan platform, tetapi biasanya kurang dari 1, kami menggunakan ini untuk mendeteksinya.
If so, we must proceed to scene IV.
Jika pertanyaan sebelumnya dievaluasi true
, kita beralih ke adegan IV — yang hanyalah akhir dari program. Singkatnya, jika kami mendeteksi EOF, kami mengakhiri program.
Romeo:
Sekarang kalimat Romeo: "aku" dan "kamu" masing-masing merujuk ke Romeo dan Juliet.
Open your mind.
Sekali lagi, pernyataan ini menempatkan nilai ordinal dari satu karakter dari STDIN ke Juliet, yang dalam hal ini adalah run-length dari karakter yang disimpan 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!
Yang ini terlalu lama untuk dibahas dengan sangat terperinci, tetapi percayalah pada saya yang diterjemahkan Juliet -= 48
. Kami melakukan ini karena Juliet memegang nilai ASCII dari suatu angka, dan ord('0') == 48
; dalam mengurangi 48, kita menerjemahkan dari nilai ASCII dari angka ke angka itu sendiri.
Scene III: In which Romeo snaps and brutally insults Juliet.
Deklarasi adegan lain. Yang ini untuk loop di mana kita berulang kali mencetak nilai karakter Romeo
, Juliet
kali.
Juliet:
Speak thy mind.
Pernyataan ini menyebabkan Romeo mencetak nilainya sebagai karakter; artinya, nilai karakter apa pun yang sebelumnya disimpan di Romeo sekarang menjadi keluaran.
Romeo:
Thou art the sum of thyself and a hog!
Babi adalah kata benda negatif, jadi a hog
diterjemahkan menjadi -1; Oleh karena itu, pernyataan ini dievaluasi untuk Juliet -= 1
.
Art thou as rotten as nothing?
Romeo di sini bertanya apakah Juliet "sama busuknya", atau sama dengan, 0.
If so, let us return to scene II.
Jika nilai Juliet adalah 0, kita kembali ke adegan II untuk memecahkan kode run-length karakter lain.
Let us return to scene III.
Lain lagi, kita kembali ke adegan III untuk menampilkan karakter Romeo lagi.
Scene IV: Finale.
[Exeunt]
Deklarasi adegan terakhir ini hanyalah penanda untuk akhir program. The [Exeunt]
arah panggung yang diperlukan untuk mendapatkan compiler untuk benar-benar menghasilkan adegan akhir.