.
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]
Ungolfed sürümü:
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]
Ben birkaç hata olan drsam94 Python SPL derleyici kullanıyorum (bu yüzden, örneğin, Open your mind
yerine Open thy mind
golfed sürümünde kullanın).
Bu programı çalıştırmak için şunu kullanın:
$ python splc.py rld.spl > rld.c
$ gcc rld.c -o rld.exe
$ echo -n ":144,1'1" | ./rld
:4444,'
Nasıl çalışır
SPL, programları Shakespeare oyunları gibi göstermek için tasarlanmış ezoterik bir programlama dilidir. Bunu karakterleri değişken olarak kullanarak yapar ve işlem karakterlerin birbirlerine bir şeyler söylemesi ile gerçekleştirilir.
The Decoding of the Lengths of Veronan Runs - A Drama of PPCG.
Bu oyunun başlığı; derleyici tarafından yoksayılır.
Romeo, quite a character.
Juliet, Romeo's lover and multiplicand.
Burada programın geri kalanında kullanılan değişkenleri bildiriyoruz. Her şey betwen ,
ve .
derleyici tarafından göz ardı edilir. Bu durumda, Romeo
kodu çözülen karakteri tutmak için kullandığımızı ve karakterin Juliet
çalışma uzunluğunu tutmak için kullandığımızı beyan ederiz .
Act I: In which the lengths of runs are decoded.
Burada programdaki ilk ve tek eylemi ilan ediyoruz. İşlemler ve sahneler etiketler gibidir; herhangi bir zamanda let us return to scene II
veya bunun bir varyantı kullanılarak atlanabilirler. Sadece tek bir hareket kullanıyoruz, çünkü bu bizim ihtiyaçlarımız için yeterli. Yine, derleyici arasındaki :
ve arasındaki herhangi bir şey .
göz ardı edilir.
Scene I: A silent entrance.
Burada ilk sahneyi ilan ediyoruz. Sahneler Romen rakamlarıyla numaralandırılmıştır: birincisi, Scene I
ikincisi Scene II
vb.
[Enter Romeo and Juliet]
Bu bir sahne yönüdür; İçinde, Romeo
ve Juliet
değişkenlerin "sahneye" gelmelerini söyleriz . Aynı anda sadece iki değişken "sahne" üzerinde olabilir; aşama, derleyicinin hangi değişkenin hangi konuşmayı ele aldığını anlayabilmesi için kullanılır. Yalnızca iki değişkenimiz olduğu için Romeo ve Juliet, program süresince sahnede kalacaklar.
Scene II: In which neither Romeo nor Juliet believes the other open-minded.
Başka bir sahne beyanı. Sahne II, başka bir çalışma uzunluğunun kodunu çözmek için atlanacaktır.
Juliet:
Bu tür bir beyan Juliet'in konuşmaya başlayacağı anlamına gelir. Bir sonraki Romeo:
, sahne yönü veya sahne / eylem deklarasyonuna kadar her şey Juliet tarafından konuşulan bir satır olacak ve bu nedenle "ben" Juliet'e, "siz" / "siz Romeo'ya" varacaksınız.
Open your mind.
Bu komut STDIN içindeki tek karakterin sıra değerini saklar Romeo
.
Is my mother jollier than thou?
SPL'de isimler, pozitif veya negatif olmalarına bağlı olarak 1 veya -1 olarak tercüme edilir. Bu durumda, my mother
1'e çevirir. Sıfatlar (pozitif veya negatif) adlarını 2 ile çarpar.
Bu bir sorudur; İçinde Juliet my mother
(AKA 1) 'in Romeo'dan "daha neşeli" olup olmadığını sorar . Karşılaştırıcılar ya less than
(eğer negatif ise, gibi worse
) ya da greater than
(eğer pozitifse, gibi jollier
) çevirirler . Bu nedenle, bu soru kaynar Is 1 greater than you?
.
Bu soruyu sormamızın nedeni girdinin sonunu tespit etmektir. Değeri EOF
platforma göre değiştiğinden, ancak genellikle 1'den az olduğundan, bunu tespit etmek için kullanırız.
If so, we must proceed to scene IV.
Eğer önceki soru değerlendirilirse true
, programın sonu olan IV. Aşamaya geçiyoruz. Kısacası, bir EOF tespit edersek programı sonlandırırız.
Romeo:
Şimdi Romeo'nun çizgisi: "ben" ve "siz" sırasıyla Romeo ve Juliet'e işaret ediyor.
Open your mind.
Yine, bu ifade STDIN'den tek bir karakterin sıra değerini Juliet'e koyar; bu durumda saklanan karakterin çalışma uzunluğu budur 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!
Bu çok ayrıntılı olarak gözden geçirmek için çok uzun, ama sadece bana dönüştüğü konusunda güven Juliet -= 48
. Bunu yaparız çünkü Juliet bir sayının ASCII değerini tutar ve ord('0') == 48
; 48 çıkarılırken, bir sayının ASCII değerinden sayının kendisine tercüme edilir.
Scene III: In which Romeo snaps and brutally insults Juliet.
Başka bir sahne beyanı. Bu kimse bizim defalarca karakter değerini yazdırmak hangi döngü içindir Romeo
, Juliet
bazen.
Juliet:
Speak thy mind.
Bu ifade Romeo'nun değerini bir karakter olarak yazdırmasına neden olur; yani, daha önce Romeo'da saklanan karakter değeri ne olursa olsun çıktı alınır.
Romeo:
Thou art the sum of thyself and a hog!
Bir domuz negatif bir isimdir, yani -1'ye a hog
çevirir; bu nedenle, bu ifade değerlendirir Juliet -= 1
.
Art thou as rotten as nothing?
Romeo burada Juliet'in "kadar çürük" veya 0'a eşit olup olmadığını sorar.
If so, let us return to scene II.
Juliet'in değeri 0 ise, başka bir karakterin çalışma uzunluğunun kodunu çözmek için sahne II'ye geri döneriz.
Let us return to scene III.
Aksi takdirde, Romeo'nun karakterini tekrar çıkarmak için III.
Scene IV: Finale.
[Exeunt]
Bu son sahne beyanı sadece programın sonu için bir belirteçtir. [Exeunt]
Sahne yönü aslında son sahneyi oluşturmak için derleyici almak gereklidir.