คุณมีคำแนะนำทั่วไปเกี่ยวกับการเล่นกอล์ฟในภาษาการเขียนโปรแกรมของเช็คสเปียร์อย่างไร? ฉันกำลังมองหาความคิดที่สามารถนำไปใช้กับปัญหารหัสกอล์ฟและอย่างน้อยก็ค่อนข้างเฉพาะ SPL (เช่น "ลบความคิดเห็น" ไม่ใช่คำตอบ)
กรุณาโพสต์หนึ่งเคล็ดลับต่อคำตอบ
คุณมีคำแนะนำทั่วไปเกี่ยวกับการเล่นกอล์ฟในภาษาการเขียนโปรแกรมของเช็คสเปียร์อย่างไร? ฉันกำลังมองหาความคิดที่สามารถนำไปใช้กับปัญหารหัสกอล์ฟและอย่างน้อยก็ค่อนข้างเฉพาะ SPL (เช่น "ลบความคิดเห็น" ไม่ใช่คำตอบ)
กรุณาโพสต์หนึ่งเคล็ดลับต่อคำตอบ
คำตอบ:
(ดี ... เนื่องจากนี่เป็นภาษาที่ฉันใช้1ฉันรู้สึกว่าฉันจำเป็นต้องเพิ่มบางสิ่งที่นี่)
ใช่ใช่ใช่นั่นเป็นมาตรฐานที่ดีสำหรับโค้ดกอล์ฟคุณเพียงแค่ใช้ชื่อตัวแปรที่มีความยาวหนึ่งตัวอักษรไม่มีข่าวที่นี่ หรือว่ามี เนื่องจาก Chaps ที่สร้าง SPL นั้นแปลกประหลาดพอที่จะไม่อนุญาตให้มีชื่อตัวแปรภาษา: พวกเขาจะต้องมาจากบทละครของ Shakesperian ซึ่งในแง่ของความยาวของตัวละครนั้นเป็นความเจ็บปวดในราชวงค์ tush - แต่ถ้าคุณเข้ารหัสใน SPL คุณรู้อยู่แล้วว่า ดังนั้นคำแนะนำของฉันคือการใช้ตัวอักษรที่มีชื่อสั้น ๆ เช่นAjax , Ford , PageหรือPuckแทนที่จะเป็นThe Archbishop of Canterburyเป็นต้น
นั่นคือทั้งหมดที่ฉันได้รับฉันกลัว
(หลังจากทำหน้าที่ก่อนหน้านี้ฉันเพิ่งจำบางสิ่ง)
ตัวอย่างเพื่อลองและอธิบายความหมายนี้
Ajax:
You are as warm as a big red rich fair cute bold cat!
และ
Ajax:
Thou art as blossoming as an embroidered trustworthy bottomless peaceful charming handsome chihuahua!
สร้างผลลัพธ์ที่เหมือนกันแน่นอนซึ่งทำให้ตัวละครที่ถูกพูดเพื่อรับค่า 64 (เนื่องจากสมมติว่าคุณอ่านการต่อสู้ที่ยาวนานของฉันกับ SPLคุณจะรู้ว่าทั้งสองเส้นมีค่าเท่ากับ 2 * 2 * 2 * 2 * 2 * 2 * 2 1); อย่างไรก็ตามอันแรกมี 59 ไบต์ในขณะที่อันที่สองมีไบต์เท่ากับ 107
แต่ถึงกระนั้นก็ยังไม่มีใครที่จะได้รับความบ้าคลั่งพอที่จะเข้าสู่ความท้าทายรหัสกอล์ฟกับ SPL ดังนั้น ...
a big big big big big big cat
บันทึกอีก 4 ไบต์? ฉันรู้ว่ามันทำลายงานศิลปะ ... แต่นี่คือรหัสกอล์ฟ ;)
หมายความว่าแทนที่จะเป็น:
Scene I
Scene II
Scene III
Scene IV
Scene V
คุณทำได้:
Scene L
Scene I
Scene C
Scene X
Scene V
D
ที่ถูกต้องตัวเลขโรมัน? IIRC มันคือ 500 (แต่ฉันไม่แน่ใจว่ามันใช้ได้ใน SPL)
ดูที่นี่ (การแทรกบรรทัดใหม่และช่องว่างสำหรับการอ่าน):
Puck:You is a big big cat!
Open your heart!
Ajax:Be you worse than I?
If so, let us return to Scene V!
If not, you is a cat.
You is the sum of I and the sum of a cat and you
Speak thy mind!
[Exeunt]
ดูน่ารักใช่มั้ย นี่คือรูปแบบที่ไม่สามารถเข้าใจได้มากยิ่งขึ้น:
Puck:You big big cat!
Open heart!
Ajax:Be you worse I?
If so, let us Scene V!
If not, you cat.
You is the sum of I the sum of a cat you
Speak mind!
สำหรับการอ้างอิงต่อไปนี้เป็นรายการของคำที่ถอดออกได้ง่ายจากรหัส:
big cat
เท่านั้นมิฉะนั้นคุณยังคงต้องการ 'เป็น'ตำนาน:
X
และY
มีค่าคงที่เช่นcat
, I
หรือyou
[op]
มีการดำเนินงานชอบnicer
,the sum of
ถ้าฉันเจอคนอื่นฉันจะเพิ่มเข้าไปในรายการ
สำหรับการอ้างอิงเพิ่มเติมต่อไปนี้เป็นส่วนหัวที่สั้นที่สุดเพื่อเริ่มโปรแกรม:
,.Ajax,.Puck,.Act I:.Scene I:.[Enter Ajax and Puck]
เพิ่มเพจและฟอร์ดเป็นอักขระพิเศษตามความจำเป็น
ดังนั้นที่นี่พวกเขาคือ:
a
แทนan
หรือthe
ยกเว้นการแสดงออกและที่คล้ายกันเพราะพวกเขาจะไม่ทำงานกับthe sum of
a
am
, be
หรือis
แทนหรือare
art
I
แทนหรือme
myself
you
แทนthee
, thou
, หรือthyself
yourself
big
สำหรับคำคุณศัพท์cat
สำหรับตัวเลขบวกpig
สำหรับจำนวนลบzero
สำหรับศูนย์worse
สำหรับA < B
(แทนsmaller
หรือpunier
)nicer
สำหรับA > B
(แทนbetter
, bigger
, fresher
, friendlier
หรือjollier
)สามารถใช้ "ให้เรากลับไปยังฉาก X" แม้ว่าตัวละครที่กำลังพูดอยู่จะอยู่นอกเวที ดังนั้นแทนที่จะ:
Puck:Am I as fat as the sum of a big big big big big big cat and a cat?
Ajax:If not,let us return to scene III.
[Exit Puck]
[Enter Page]
Ajax:You is a big big big big big big cat.
คุณทำได้:
Puck:Am I as fat as the sum of a big big big big big big cat and a cat?
[Exit Puck]
[Enter Page]
Ajax:If not,let us return to scene III.You is a big big big big big big cat.
นอกเหนือจากสิ่งเล็กน้อย (ช่องว่างที่อยู่ติดกันสองช่องซึ่งอยู่ติดกับเครื่องหมายวรรคตอนติดกับบรรทัดใหม่ตอนท้าย) (มีข้อยกเว้นบางประการ) พื้นที่หลังจากโทเค็นต่อไปนี้สามารถลบได้:
the sum of
let us
the ghost
( เช่นนี้ ) (แต่ใครจะใช้ตัวละครนี้อยู่ดี)if so
และif not
(ลบ,
หลังจากนี้และไม่จำเป็นต้องเพิ่มพื้นที่ใดตัวอย่าง:. if solet usact I
)listen to
( listen tothy
ทำงานได้เช่นนี้ )หมายเหตุ: นี่ไม่ได้ทำงานกับล่าม Perl อาจเป็นเพียงผลที่ไม่ได้ตั้งใจซึ่งเกิดจากพฤติกรรมการแยกวิเคราะห์ของ Flex "มาตรฐานภาษา"ไม่ชัดเจนเกี่ยวกับว่า
ตัวอย่างเช่น,
Ajax:Is you better than the sum of a fat fat fat fat cat and a fat cat?
Puck:If so,let us return to Scene I.
นานกว่า
Ajax:Is you better than the sum of a fat fat fat fat cat and a fat cat?If so,let us return to Scene I.
You is the difference between I and a big cat.
นานกว่า
You is the sum of I and a big pig.
คุณสามารถใช้งานreturn to
ได้แม้ว่าฉากนั้นจะอยู่ข้างหน้าและในทางกลับกัน ในความเป็นจริงล่ามไม่ได้สนใจว่าคุณจะไม่สนใจมันเลย ซึ่งหมายความว่าทั้งสามข้อความนี้เทียบเท่า 100%:
Let us proceed to Scene X.
Let us return to Scene X.
Let us Scene X.
โดยปกติแล้วคุณไม่สามารถใช้ฉากแรกของการแสดงซ้ำได้เนื่องจากมันมี[Enter Ajax and Puck]
สิ่งแรกเสมอ อย่างไรก็ตามคุณสามารถใช้คำนำหน้านี้[Exeunt]
เพื่อให้สามารถนำฉากแรกของการเล่นมาใช้ซ้ำได้ [Exeunt]
สั้นกว่าการประกาศฉากใหม่หนึ่งไบต์และการกระโดดไปที่การกระทำนั้นน้อยกว่าการกระโดดไปยังฉากหนึ่งไบต์
เช่นโปรแกรมแมวอย่างง่าย
,.Ajax,.Page,.Act I:.Scene I:.[Enter Page and Ajax]Scene V:.Ajax:Open mind!Speak thy!Let usScene V!
ไปที่:
,.Ajax,.Page,.Act I:.Scene I:.[Exeunt][Enter Page and Ajax]Ajax:Open mind!Speak thy!Let usAct I!
ตัวอย่าง:
Thy
และthyself
จะสั้นกว่าและyour
yourself
Is
are
จะสั้นกว่า
และอื่น ๆ...
ตัวอย่างเช่นอย่าใช้
Ajax:Are you as good as or better than me?If so,let us return to Scene I.
แต่,
Ajax:Are you worse than me?If not,let us return to Scene I.
If (so|not)
ไม่จำเป็นต้องทำตามการเปรียบเทียบทันทีAm I as big as you?You big big big big big cat.If so, you is the sum of you and a big big cat.
If so
ภาพ สิ่งนี้มีประโยชน์ในการหลีกเลี่ยงการเปรียบเทียบซ้ำ!
ตัวอย่างเช่นถ้าคุณมี
Ajax:You is a fat fat fat fat fat fat fat fat fat fat cat!
Puck:You is the sum of thyself and a fat fat fat fat fat fat fat fat fat fat cat
Ajax:You is the sum of the difference of me and thyself and a fat fat fat fat fat fat fat fat fat fat cat!
คุณสามารถประกาศบุคคลอื่นที่ด้านบนสุด
Ford,a fat fat fat fat fat fat fat fat fat fat cat.
และเปลี่ยนรหัสของคุณเป็น
Ajax:You is Ford.
Puck:You is the sum of thyself and Ford.
Ajax:You is the sum of the difference of me and thyself and Ford.
If (so|not)
Am I as big as you?If so,you is the sum of you and a big big cat.If not,you is the sum of you and twice I.
,.Ajax,.Puck,.Page,.Act:.Scene:.[Enter Ajax and Puck]Ajax:You Puck.[Exeunt]
<
หรือ>
แทน==
ไม่สามารถใช้ได้กับทุกสถานการณ์ แต่ค่อนข้างสั้นกว่าเล็กน้อย:
Puck:Is I as bad as you?
Puck:Is I worse you?
Puck:Is I nicer you?
สั้นลง 4 ไบต์สำหรับทั้งสอง!
.
!
[
นอกจากนี้ยังสามารถนำมาใช้ก่อน (ขอบคุณ jimmy23013)
,.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:You cat[Exeunt]
ตัวอย่าง:
,.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:You cat
,.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:Open mind[Exeunt]
ไม่ทำงานใน:
,.Ajax,.Page,.Act I:.Scene I:[Enter Ajax]
(หลังจากนี้Scene {number}:
) (อย่างไรก็ตามสิ่งนี้ใช้ได้ผลฉันไม่ทราบสาเหตุ),.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:Listen to your heart
(และรุ่นที่สั้นกว่า),.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:Let us return to scene I
(และรุ่นที่สั้นกว่า),.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:Recall
(เฉพาะหลังจากที่ว่างเปล่าRecall
, Recall x
หรือRecall@
ฯลฯ ผลงาน),.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:Speak thy
(ไม่รวมmind
)Speak thy
หรือLet us Scene I
แทน:
You is the sum of a big big big big cat a big big big cat.
ใช้:
You is twice twice twice the sum of a big cat a cat.
วิธีนี้ช่วยประหยัด 2 ไบต์ต่อtwice
เนื่องจากการใช้ 2 ครั้งbig
คือ 8 ไบต์ (มีช่องว่าง) และtwice
มีเพียง 6 ไบต์