การส่งรหัสกอล์ฟที่ประสบความสำเร็จนั้นเป็นไปตามธรรมชาติที่เต็มไปด้วยสัญลักษณ์บ้า ๆ ทั่วทุกแห่ง เพื่อให้เข้าใจง่ายยิ่งขึ้นนักกอล์ฟหลายคนเลือกที่จะรวมคำอธิบายเกี่ยวกับรหัสของตนไว้ด้วย ในคำอธิบายของพวกเขาบรรทัดของรหัสจะกลายเป็นแผนภาพระเบิดในแนวตั้ง
ตัวอย่างเช่นหากนี่เป็นรหัสของฉัน:
1_'[3:~2@+]`
หนึ่งในไดอะแกรมที่เป็นไปได้มากมายที่ฉันสามารถสร้างได้จะเป็นดังนี้:
1
_'
[ ]
[3: ]
[ ~ ]
[ 2@ ]
[ +]
`
เป้าหมาย
ในความท้าทายนี้คุณจะเขียนคำอธิบายเครื่องมือการจัดรูปแบบอัตโนมัติซึ่งใช้บรรทัดของรหัสและสร้างไดอะแกรมที่สามารถเพิ่มข้อความอธิบายได้อย่างง่ายดาย
เพื่อที่จะทำให้สิ่งนี้เป็นความท้าทายที่มีประโยชน์มากขึ้นผู้ใช้จะสามารถระบุเนื้อหาของแต่ละบรรทัดได้โดยการจัดเตรียมสตริงการจัดรูปแบบ สตริงการจัดรูปแบบจะเป็นบรรทัดที่สองที่มีตัวอักษรเท่านั้นA-Za-z
ซึ่งมีความยาวเท่ากับโปรแกรม ตัวอักษรแสดงลำดับที่ตัวอักษรของโปรแกรมควรพิมพ์ในคำอธิบาย
นี่คือตัวอย่างของ I / O โดยไม่มีการจัดรูปแบบเหมือนวงเล็บ :
123423
AabcBC
1
2
3
2
3
4
วงเล็บ
หากมีอักขระมากกว่าหนึ่งตัวในโปรแกรมที่มีระดับความสำคัญเท่ากันชุดของอักขระนั้นจะทำหน้าที่เป็นบล็อกเดียวของโค้ด (หากเป็นกลุ่ม) หรือชุดของวงเล็บ (หากมีอักขระอื่นอยู่ระหว่าง) กฎทั่วไปนั้นง่าย:
อักขระจะไม่ปรากฏในบรรทัดของไดอะแกรมจนกว่าอักขระอื่น ๆ ที่มีลำดับความสำคัญมากกว่าทั้งหมดจะปรากฏในบรรทัดด้านบนในไดอะแกรม
อักขระที่มีลำดับความสำคัญเท่ากันจะพิมพ์บนบรรทัดเดียวกันเสมอ หากอักขระบางตัวปรากฏบนบรรทัดอักขระอื่นทั้งหมดที่มีลำดับความสำคัญเท่ากันจะปรากฏขึ้นบนบรรทัด
ชุดอักขระที่มีลำดับความสำคัญเท่ากันจะยังคงปรากฏในแต่ละบรรทัดจนกว่าอักขระอื่นทั้งหมดที่อยู่ในนั้นจะปรากฏขึ้นอย่างน้อยหนึ่งครั้ง สิ่งนี้อนุญาตสำหรับการก่อสร้าง "เหมือนวงเล็บ" หาก
bceab
มีลำดับความสำคัญb
อักขระนั้นจะปรากฏในบรรทัดที่สอง (เป็นลำดับความสำคัญสูงสุดลำดับที่สอง) และจะปรากฏต่อไปจนกว่าcea
อักขระทั้งหมดจะปรากฏขึ้น หากสตริงลำดับความสำคัญคือabcadeafga
ทั้งหมดbcdefg
จะถูกพิจารณาว่าอยู่ภายในสตริงนั้นทั้ง 4a
วินาทีจะยังคงปรากฏจนกว่าจะg
มีปรากฏ
ข้อกำหนดการจัดรูปแบบเพิ่มเติม
ทุกบรรทัดของเอาต์พุตควรมีความยาวเท่ากัน (ความยาวของบรรทัดอินพุต) ซึ่งมีพื้นที่ว่างตามที่จำเป็น บรรทัดโปรแกรมอินพุตอาจมีช่องว่างแม้ว่าช่องว่างเหล่านั้นจะได้รับตัวอักษรที่มีความสำคัญ ขึ้นบรรทัดใหม่ของเอาต์พุต / อินพุตเป็นตัวเลือก
เกณฑ์การให้คะแนน
นี่คือการแข่งขันกอล์ฟรหัสไบต์น้อยที่สุดชนะ
ตัวอย่าง
นี่คือตัวอย่างที่ถูกคอมเม้นต์ของโค้ดที่มีการจัดรูปแบบที่ซับซ้อนมากขึ้น
1_'[3:~2@+]`
abbcddeffgch
1 #highest priority is denoted by the lowercase letter a
_' #priority b
[ ] #all characters with priority c
[3: ] #priority d, but priority c still printed because it encloses more
[ ~ ] #priority e
[ 2@ ] #priority f
[ +] #priority g, last line of c because all enclosed characters have appeared
` #priority h
ตัวอย่างใน Perl:
$_=<>;s/[^aeiou\W]/$&o$&/gi;print
aaaaaabbccccccccccbdddddbbbbeeeee
$_=<>;
s/ / /gi;
s/[^aeiou\W]/ /gi;
s/ /$&o$&/gi;
print
นี่คือตัวอย่างบางส่วนใน CJam ซึ่งได้รับความอนุเคราะห์จาก Martin Büttner:
l~2*{_2%{3*)}{2/}?_p_(}g;
aabbcdddefffeeggeehhiiccj
l~
2*
{ }g
{_2% }g
{ { }{ }? }g
{ {3*)}{ }? }g
{ { }{2/}? }g
{ _p }g
{ _(}g
;
q{_eu'[,66>"EIOU"-#)g{'o1$}*}/
abcccddddddeeeeeeefgghiijjhhbb
q
{ }/
{_eu }/
{ '[,66> }/
{ "EIOU"- }/
{ # }/
{ )g }/
{ { }*}/
{ {'o }*}/
{ { 1$}*}/
นี่เป็นตัวอย่างที่บ้าคลั่งที่จะยุ่งกับคุณ:
1_'[3:~2@+]`
azTABACBDCAT
[ : ]
[3: 2 ]
[3:~2 +]
[ :~ @+]
' `
1
_
abab
นี่เป็นตัวอย่างที่ชัดเจนมากขึ้นของสิ่งที่เกิดขึ้นเมื่อวงเล็บซ้อนทับกันเช่น (โดยปกตินี่ไม่ใช่วิธีที่คุณจะเลือกจัดรูปแบบคำอธิบายของคุณ)
aabbccddaaeebb
aabbccddaaeebb
aa aa
aabb aa bb
aabbcc aa bb
aabb ddaa bb
bb eebb #"aa" no longer appears because all of "bbccdd" have already appeared.
oNo
สามารถถูกแทนที่ด้วยn
ในTIO