.
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]
เวอร์ชันที่ไม่ถูกปรับแต่ง:
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]
ฉันใช้คอมไพเลอร์ Python SPL ของ drsam94ซึ่งมีข้อบกพร่องเล็กน้อย (ซึ่งเป็นสาเหตุที่ยกตัวอย่างเช่นฉันใช้Open your mind
แทนOpen thy mind
ในเวอร์ชัน golfed)
เพื่อรันโปรแกรมนี้ใช้:
$ python splc.py rld.spl > rld.c
$ gcc rld.c -o rld.exe
$ echo -n ":144,1'1" | ./rld
:4444,'
มันทำงานอย่างไร
SPL เป็นภาษาโปรแกรมลับที่ออกแบบมาเพื่อให้โปรแกรมดูเหมือนกับ Shakespeare ทำได้โดยใช้ตัวอักษรเป็นตัวแปรและการประมวลผลทำได้โดยให้ตัวละครพูดสิ่งต่าง ๆ กัน
The Decoding of the Lengths of Veronan Runs - A Drama of PPCG.
นี่คือชื่อของการเล่น; มันถูกละเว้นโดยคอมไพเลอร์
Romeo, quite a character.
Juliet, Romeo's lover and multiplicand.
ที่นี่เราจะประกาศตัวแปรที่ใช้ในส่วนที่เหลือของโปรแกรม ทุกสิ่งที่เกิดขึ้น,
และ.
ถูกละเว้นโดยคอมไพเลอร์ ในกรณีนี้เราประกาศRomeo
ใช้เพื่อเก็บอักขระที่กำลังถอดรหัสและJuliet
ใช้เพื่อเก็บความยาวของอักขระ
Act I: In which the lengths of runs are decoded.
ที่นี่เราประกาศการกระทำแรกและที่เดียวในโปรแกรม การกระทำและฉากเป็นเหมือนป้ายกำกับ พวกเขาสามารถกระโดดไปที่ใดก็ได้โดยใช้let us return to scene II
หรือตัวแปรบางอย่างของที่ เราใช้การกระทำเพียงอย่างเดียวเพราะมันเพียงพอสำหรับความต้องการของเรา คอมไพเลอร์จะละเว้นสิ่งใดระหว่าง:
และ.
ถูกละเว้น
Scene I: A silent entrance.
ที่นี่เราประกาศฉากแรก ฉากถูกกำหนดหมายเลขเป็นเลขโรมันฉากแรกคือScene I
ฉากที่สองScene II
เป็นต้น
[Enter Romeo and Juliet]
นี่คือทิศทางของเวที ในนั้นเราบอกRomeo
และJuliet
ตัวแปรที่จะเข้าสู่ "เวที" มีเพียงสองตัวแปรเท่านั้นที่สามารถอยู่ใน "สเตจ" พร้อมกัน สเตจจะถูกใช้เพื่อให้คอมไพเลอร์สามารถคิดได้ว่าตัวแปรใดที่อยู่ซึ่งเมื่อพวกเขาพูด เนื่องจากเรามีเพียงสองตัวแปรโรมิโอและจูเลียตจะอยู่บนเวทีตลอดความยาวของโปรแกรม
Scene II: In which neither Romeo nor Juliet believes the other open-minded.
ประกาศอีกฉาก ฉากที่สองจะถูกข้ามไปเพื่อถอดรหัสการวิ่งอีกครั้ง
Juliet:
การประกาศในรูปแบบนี้หมายความว่าจูเลียตกำลังจะเริ่มพูด ทุกอย่างจนกว่าคำสั่งRomeo:
ขั้นต่อไปหรือการประกาศฉาก / การกระทำจะเป็นบรรทัดที่จูเลียตพูดดังนั้น "ฉัน" จะหมายถึงจูเลียต "คุณ" / "เจ้า" ถึงโรมิโอ ฯลฯ
Open your mind.
คำสั่งนี้จะจัดเก็บค่าลำดับของตัวละครเดียวจาก STDIN Romeo
ใน
Is my mother jollier than thou?
ใน SPL คำนามแปลเป็น 1 หรือ -1 ขึ้นอยู่กับว่าเป็นบวกหรือลบ ในกรณีนี้my mother
แปลเป็น 1 คำคุณศัพท์ (บวกหรือลบ) คูณคำนามของพวกเขาด้วย 2
นี่เป็นคำถาม ในนั้น Juliet ถามว่าmy mother
(AKA 1) เป็น "jollier" มากกว่า Romeo หรือไม่ การเปรียบเทียบอาจแปลเป็นless than
(หากพวกเขาเป็นลบเช่นworse
) หรือgreater than
(ถ้าพวกเขาเป็นบวกเช่นjollier
) Is 1 greater than you?
ดังนั้นคำถามนี้เดือดลงไป
เหตุผลที่เราถามคำถามนี้คือเพื่อตรวจหาจุดสิ้นสุดของอินพุต เนื่องจากค่าEOF
แตกต่างกันไปตามแพลตฟอร์ม แต่มักจะน้อยกว่า 1 เราจึงใช้สิ่งนี้เพื่อตรวจจับ
If so, we must proceed to scene IV.
หากคำถามก่อนหน้านี้ได้รับการประเมินtrue
เราจะข้ามไปที่ฉาก IV ซึ่งเป็นเพียงจุดสิ้นสุดของโปรแกรม กล่าวโดยย่อหากเราตรวจพบ EOF เราจะสิ้นสุดโปรแกรม
Romeo:
ตอนนี้มันเป็นแนวของโรมิโอ: "ฉัน" และ "คุณ" หมายถึงโรมิโอและจูเลียตตามลำดับ
Open your mind.
อีกครั้งคำพูดนี้ทำให้ค่าลำดับตัวอักษรตัวเดียวจาก STDIN 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!
คนนี้ยาวเกินกว่าจะได้รายละเอียดมาก แต่เชื่อใจฉันเถอะว่ามันแปลJuliet -= 48
ว่า เราทำเช่นนี้เพราะจูเลียตถือค่า ASCII ของตัวเลขและord('0') == 48
; ในการลบ 48 เราแปลจากค่า ASCII ของตัวเลขเป็นตัวเลขเอง
Scene III: In which Romeo snaps and brutally insults Juliet.
ประกาศฉากอื่น หนึ่งนี้เป็นห่วงที่เราซ้ำแล้วซ้ำอีกพิมพ์ค่าของตัวละครRomeo
, Juliet
ครั้ง
Juliet:
Speak thy mind.
คำสั่งนี้ทำให้โรมิโอพิมพ์ค่าของเขาเป็นตัวละคร นั่นคือสิ่งที่มูลค่าตัวละครใด ๆ ที่เก็บไว้ก่อนหน้านี้ใน Romeo ตอนนี้เอาท์พุท
Romeo:
Thou art the sum of thyself and a hog!
หมูเป็นคำนามเชิงลบดังนั้นa hog
แปลเป็น -1; Juliet -= 1
ดังนั้นคำสั่งนี้ประเมิน
Art thou as rotten as nothing?
โรมิโอที่นี่ถามว่าจูเลียตเป็น "เน่าเหมือน" หรือเท่ากับ 0
If so, let us return to scene II.
หากค่าของจูเลียตเป็น 0 เราจะวนกลับไปยังฉากที่ 2 เพื่อถอดรหัสความยาวของตัวละครอื่น
Let us return to scene III.
ถ้าอย่างนั้นเราวนกลับไปยังฉาก III เพื่อเอาท์พุทตัวละครของโรมิโออีกครั้ง
Scene IV: Finale.
[Exeunt]
การประกาศฉากสุดท้ายนี้เป็นเพียงเครื่องหมายสำหรับการสิ้นสุดของโปรแกรม [Exeunt]
ทิศทางขั้นตอนมีความจำเป็นต้องได้รับการรวบรวมเพื่อสร้างจริงฉากสุดท้าย