คุณมีคำแนะนำทั่วไปเกี่ยวกับการเล่นกอล์ฟในภาษาการเขียนโปรแกรมของเช็คสเปียร์อย่างไร? ฉันกำลังมองหาความคิดที่สามารถนำไปใช้กับปัญหารหัสกอล์ฟและอย่างน้อยก็ค่อนข้างเฉพาะ 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 ofaam, beหรือisแทนหรือareartIแทนหรือmemyselfyouแทนthee, thou, หรือthyselfyourselfbigสำหรับคำคุณศัพท์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 oflet usthe 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จะสั้นกว่าและyouryourself
Isareจะสั้นกว่า
และอื่น ๆ...
ตัวอย่างเช่นอย่าใช้
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 ไบต์