มันสนุกมาก ขอบคุณสำหรับการโพสต์ความท้าทายนี้
การเปิดเผยแบบเต็ม: ภาษา (Hexagony) ไม่มีอยู่ในขณะที่มีการโพสต์ความท้าทายนี้ อย่างไรก็ตามฉันไม่ได้ประดิษฐ์และภาษาไม่ได้ถูกออกแบบมาสำหรับความท้าทายนี้ (หรือความท้าทายเฉพาะอื่น ๆ )
){_2"_{\"{{""}"{'2//_.\><*\"\/_><[\]/3\'\_;|#__/(\2\'3_'}(#:|{$#{>_\//(#={/;01*&"\\_|[##={|}$_#></)]$_##|){*_.>.(/?#//~-="{}<_"=#/\}.>"%<.{#{x\"<#_/=&{./1#_#>__<_'\/"#|@_|/{=/'|\"".{/>}]#]>(_<\'{\&#|>=&{{(\=/\{*'"]<$_
วางหกเหลี่ยม:
) { _ 2 " _ { \ "
{ { " " } " { ' 2 /
/ _ . \ > < * \ " \ /
_ > < [ \ ] / 3 \ ' \ _
; | # _ _ / ( \ 2 \ ' 3 _
' } ( # : | { $ # { > _ \ /
/ ( # = { / ; 0 1 * & " \ \ _
| [ # # = { | } $ _ # > < / ) ]
$ _ # # | ) { * _ . > . ( / ? # /
/ ~ - = " { } < _ " = # / \ } .
> " % < . { # { x \ " < # _ /
= & { . / 1 # _ # > _ _ < _
' \ / " # | @ _ | / { = /
' | \ " " . { / > } ] #
] > ( _ < \ ' { \ & #
| > = & { { ( \ = /
\ { * ' " ] < $ _
โปรแกรมไม่ได้ใช้#
คำสั่งดังนั้นฉันจึงใช้ตัวอักษรนั้นเพื่อแสดงว่าเซลล์ใดที่ไม่ได้ใช้จริง
โปรแกรมนี้ทำงานอย่างไร ขึ้นอยู่กับว่า คุณต้องการเวอร์ชั่นสั้นหรือยาวหรือไม่?
คำอธิบายสั้น ๆ
หากต้องการแสดงสิ่งที่ฉันหมายถึงโดย "บรรทัด" และ "ส่วน" ในคำอธิบายต่อไปนี้ให้พิจารณาการแยกส่วนของผลลัพธ์ที่ต้องการ
segments →
│ │ │ │ │ │x lines
─┼───┼─┼─────────┼─┼───┼─ ↓
│ │ │ │ │xxx│
─┼───┼─┼─────────┼─┼───┘
│ │ │ │x│
─┼───┼─┼─────────┼─┘
│ │ │xxxxxxxxx│
─┼───┼─┼─────────┘
│ │x│
─┼───┼─┘
│xxx│
─┼───┘
x│
เมื่ออธิบายแล้วโปรแกรมจะสอดคล้องกับรหัสเทียมต่อไปนี้
n = get integer from stdin
# Calculate the number of lines we need to output.
line = pow(2, n+1)
while line > 0:
line = line - 1
# For all segments except the last, the character to use is spaces.
ch = ' ' (space, ASCII 32)
# The number of segments in each line is
# equal to the line number, counting down.
seg = line
while seg > 0:
seg = seg - 1
# For the last segment, use x’s.
if seg = 0:
ch = 'x' (ASCII 120)
# Calculate the actual segment number, where the leftmost is 1
n = line - seg
# Output the segment
i = pow(3, number of times n can be divided by 2)
i times: output ch
output '\n' (newline, ASCII 10)
end program
คำอธิบายยาว ๆ
โปรดดูแผนภาพเส้นทางของรหัสสีนี้
การดำเนินการเริ่มต้นที่มุมซ้ายบน ลำดับของคำสั่ง){2'"''3''"2}?)
ถูกดำเนินการ (รวมถึงการยกเลิกซ้ำซ้อนสองสามอย่างเช่น"{
อื่น ๆ ) โดยดำเนินการตามเส้นทางที่ซับซ้อน เราเริ่มต้นด้วย Instruction Pointer # 0 เน้นด้วยสีแดงเข้ม ผ่านไปครึ่งทางเราสลับไปที่ # 1 เริ่มต้นที่มุมขวาบนและทาสีด้วยสีเขียวของป่าไม้ เมื่อ IP # 2 เริ่มทำงานในคอร์นฟลาวเวอร์สีน้ำเงิน (กลางขวา) โครงร่างหน่วยความจำคือ:
ตลอดทั้งโปรแกรมขอบที่มีเครื่องหมาย2aและ2bจะมีค่าเสมอ2
(เราใช้เพื่อคำนวณ2ⁿ⁺¹และหารด้วย 2 ตามลำดับ) และขอบที่มีป้ายกำกับ3จะเป็น3
(เราใช้สิ่งนั้นในการคำนวณ 3.)
เราเข้าสู่ธุรกิจเมื่อเราเข้าสู่วงแรกของเราเน้นด้วยดอกไม้ชนิดหนึ่งสีน้ำเงิน การวนซ้ำนี้ประมวลผลคำแนะนำ(}*{=&}{=
ในการคำนวณค่า2ⁿ⁺¹ เมื่อออกจากวงทางเดินสีน้ำตาลของอานจะถูกนำไปที่ Instruction Pointer # 3 ทรัพย์สินทางปัญญานี้แค่จับตามขอบด้านล่างไปทางทิศตะวันตกด้วยสีเหลืองทองและจะผ่านการควบคุมไปยังหมายเลข IP 4 ในไม่ช้า
เส้นทางสีแดงม่วงบ่งบอกว่า IP # 4 เริ่มต้นในด้านล่างซ้ายรายได้อย่างรวดเร็วจะลดลงเส้นชุดCHไป32
(อักขระช่องว่าง) และsegไป (ค่าใหม่ของ) บรรทัด มันเป็นเพราะการลดลงในช่วงต้นที่เราเริ่มต้นด้วย2ⁿ⁺¹ − 1 และในที่สุดก็พบกับการวนซ้ำครั้งสุดท้ายด้วยค่า 0 จากนั้นเราป้อนที่ซ้อนกันแรกห่วง
เราหันความสนใจของเราไปยังครามที่แตกต่างกันซึ่งหลังจากที่มีการลดลงของsegสั้น ๆเราจะเห็นการปรับปรุงchเพื่อx
ถ้าsegเป็นศูนย์ หลังจากนั้นnถูกตั้งค่าเป็นเส้น - segเพื่อกำหนดจำนวนจริงของกลุ่มที่เราเข้ามาทันทีที่เราเข้าไปในวงอื่นคราวนี้เป็นสีที่ยุติธรรมของมะเขือเทศ
ที่นี่เราคิดออกกี่ครั้งn (หมายเลขเซกเมนต์ปัจจุบัน) สามารถหารด้วย 2 ได้ตราบใดที่โมดูโลทำให้เราเป็นศูนย์เราจะเพิ่มiและหารnด้วย 2 เมื่อเราพอใจแล้วnจะหารไม่ได้อีกต่อไป เราแยกออกเป็นสีเทาแบบกระดานชนวนซึ่งมีสองลูป: อันดับแรกมันยก 3 ถึงพลังของi ที่เราคำนวณแล้วมันก็ส่งออกchหลาย ๆ ครั้ง สังเกตว่าลูปแรกของเหล่านี้มี[
คำสั่งซึ่งเปลี่ยนการควบคุมเป็น IP # 3 - ขั้นตอนเดียวที่ทำตามขั้นตอนทารกไปตามขอบด้านล่างก่อนหน้านี้ ร่างกายของลูป (คูณด้วย 3 และลดลง) ดำเนินการโดย IP ที่อ้างว้าง 3 ซึ่งถูกขังอยู่ในวงจรสีเขียวมะกอกเข้มที่ไม่รู้จบตามขอบด้านล่างของรหัส ในทำนองเดียวกันที่สองของลูปสีเทากระดานชนวนเหล่านี้มี]
คำสั่งซึ่งเปิดใช้งาน IP # 5 เพื่อส่งออกchและการลดลงแสดงที่นี่ในอินเดียแดงเข้ม ในทั้งสองกรณีพอยน์เตอร์คำสั่งเหล่านั้นที่ติดอยู่ในความเป็นทาสเชื่อฟังดำเนินการหนึ่งครั้งและทำซ้ำการควบคุมกลับไปที่ IP # 4 เพียงเพื่อรอเวลาที่จะได้รับการบริการอีกครั้ง กระดานชนวนสีเทาในขณะที่เข้าร่วมกับสีแดงม่วงและสีครามพี่น้อง
เมื่อseg เข้าใกล้ศูนย์อย่างหลีกเลี่ยงไม่ได้ห่วงสีครามจะเข้าสู่เส้นทางสีเขียวของสนามหญ้าซึ่งจะแสดงเฉพาะอักขระขึ้นบรรทัดใหม่และจะรวมกลับเข้าไปในบานเย็นทันทีเพื่อให้เกิดการวนซ้ำของเส้นต่อไป นอกเหนือจากการย้ำสุดท้ายของสายห่วงอยู่เส้นทาง Ebon สั้นสีดำของยกเลิกโปรแกรมที่ดีที่สุด
(,],~3^#@~.)@]
แทนการ(1,[:,1,"0~3*])
บันทึก 1 ไบต์ และถ้าคุณโอเคกับ!
เอาท์พุทถ่านu:32+
แทนการ' #'{~
บันทึกอีกอันหนึ่ง