MATL , 56 53 ไบต์
:"'!!((!((!!#*```).?p0```!!!]'8eP!P]'p(.' '.a-'XE&hqc
ลองออนไลน์!
คำอธิบาย
ตื่นตัวแพะ
แพะที่ตื่นตัวนั้นสามารถบรรจุลงในสายอักขระได้
'' '' ")___(->o/___ \
และแตกออกตามที่จะอธิบายในไม่ช้า อย่างไรก็ตามสัญลักษณ์เครื่องหมายคำพูดเดี่ยวจะต้องมีการทำซ้ำเพื่อที่จะหลบหนีดังนั้นสตริงตัวอักษรจะต้องถูกกำหนดเป็น (หมายเหตุสัญลักษณ์ล้อมรอบอ้างเดี่ยวและการทำซ้ำของต้นฉบับ):
' '''' '''' ")___(->o/___ \'
ในการบันทึกไบต์เรากำหนดสตริงโดยใช้อักขระหนึ่งจุดโค้ดด้านบนซึ่งหลีกเลี่ยงการทำซ้ำ สตริงตัวอักษรกลายเป็น
'!!((!((!!#*```).?p0```!!!]'
ในตอนท้ายของรหัสเราจะลบ 1 และแปลงเป็นถ่าน (เราสามารถทำได้ทันทีหลังจากสตริงตัวอักษร แต่การปล่อยให้จบจะช่วยให้การทำซ้ำการอ้างอิงเดียวอีกครั้งตามที่เราจะเห็น)
เพื่ออธิบายวิธีคลายสตริงเราจะทำงานร่วมกับอักขระดั้งเดิม (ซึ่งผลิตที่ท้ายรหัสโดยการลบ 1) เพื่อให้คำอธิบายง่ายขึ้น ก่อนอื่นเราปรับรูปร่างสตริง
'' '' ")___(->o/___ \
ลงในอาร์เรย์ถ่าน 8 แถว 8 แถวตามลำดับคอลัมน์ (ลงจากนั้นข้าม) สิ่งนี้จะรองคอลัมน์สุดท้ายโดยอัตโนมัติด้วยอักขระถ่าน 0 (ในตอนท้ายของรหัสการลบ 1 จะเปลี่ยนเป็นหมายเลข −1 ซึ่งแปลงเป็นถ่านให้ถ่านอีกครั้ง 0) Char 0 แสดงเป็นช่องว่าง อย่างมีประสิทธิภาพดังนั้นเราจึงมีช่องว่างภายใน ผลลัพธ์ของการปรับรูปร่างใหม่คือ
>
"o\
')/
'__
__
'__
'(
-
ตอนนี้เราพลิกแนวตั้ง:
-
'(
'__
__
'__
')/
"o\
>
จากนั้นขนย้ายและพลิกในแนวตั้งอีกครั้งเพื่อสร้างแพะที่ตื่นอยู่:
\
___/o>
-(___)"
'' ''
จำเป็นต้องใช้การพลิกสองครั้งเนื่องจากสตริงที่บรรจุดั้งเดิมคือ "ย้อนกลับ" นี่คือการใช้ประโยชน์จากข้อเท็จจริงที่ว่าอาร์เรย์ถ่าน 2 มิติที่เป็นตัวแทนของแพะนั้นมีช่องว่างเริ่มต้น 6 ช่องในแถวแรกของมันซึ่งจะถูกเติมโดยอัตโนมัติด้วยการเติมเมื่อสตริงถูกเปลี่ยนเป็นสตริง 2D 8 แถว แต่การเติมจะทำที่ท้าย (ไม่ใช่จุดเริ่มต้น) ของคอลัมน์สุดท้าย (ไม่ใช่แถว) ดังนั้นการพลิกและการแปลง
นอนหลับแพะ
แพะนอนถูกสร้างขึ้นจากแพะตื่นโดยตัวอักษร transliterating o
, '
, -
เข้า-
, `
, ,
ตามลำดับ จริงเพราะการเปลี่ยนแปลงหนึ่งรหัสจุดข้างต้นเราแปลตัวอักษรp
, (
, '
เข้า.
, a
, -
อีกครั้งซึ่งช่วยเราจากที่มีการทำซ้ำสัญลักษณ์อ้างเดียว นี่คือเหตุผลที่การดำเนินการลบหนึ่งถูกทิ้งไว้ที่ส่วนท้ายของโปรแกรม
โครงสร้างรหัส
- สร้างเวลาในการตื่นของแพะ
N
ทำงานกับคะแนนรหัสเพิ่มขึ้น 1
- เปลี่ยนแพะตัวสุดท้ายให้กลายเป็นแพะหลับ
- เชื่อมแพะทุกตัวในแนวนอน ลบ 1 ถึงรหัสคะแนนและโยนเพื่อถ่าน
รหัสแสดงความคิดเห็น
: % (Step 1) Implicitly input N. Push range [1 2 ... N]
" % For each (i.e. repeat N times)
'!!((!((!!#*```).?p0```!!!]' % Push this string. Quotes are escaped by duplicating
8e % Reshape into an 8-row 2D array of char, in
% column-major order, padding last column with
% char 0
P % Flip vertically
!P % Transpose and flip vertically
] % End
'p(.' % (Step 2) Push this string: source for transliteration
'.a-' % Push this string: target for transliteration
XE % Transliterate. Transforms last goat into sleeping
&h % (Step 3) Horizontally concat all 2D char arrays
qc % Subtract 1 and convert to char. 0 becomes −1, which
% is converted to char 0, which is displayed as a space
% Implicitly display