Japt , 43 ไบต์
"Ýûÿ©ÿßY÷ß"®c s4äëAU ¬£2839¤ë4X÷d0S1U
มีบาง unprintables ลองออนไลน์!
Tallies: 13 ไบต์ของข้อมูลที่ถูกบีบอัด, 9 bytes เพื่อคลายการบีบอัดและ 21 bytes เพื่อจัดรูปแบบเอาต์พุต
คำอธิบาย
รหัสไม่ได้รับการตอบกลับ:
"Ýûÿ©ÿßY÷ß"® c s4à ¤ ëAU ¬ £ 2839¤ ë4Xà · d0S1U
"Ýûÿ©ÿßY÷ß"mZ{Zc s4} s2 ëAU q mX{2839s2 ë4X} qR d0S1U
มีความเป็นไปได้ของแถวที่แตกต่างกัน 4 ประการ: ( #
แทนตัวเลข)
#
#
# #
###
ดังนั้นแต่ละหมายเลขสามารถจัดเก็บเป็นชุดห้าหลักฐาน 4 เนื่องจากแต่ละหมายเลขสามารถถูกเก็บไว้ใน 10 บิตรวมเป็น 100 บิตซึ่งสอดคล้องกับ 13 ไบต์ ฉันจะข้ามกระบวนการบีบอัดและอธิบายการบีบอัดแทน
mZ{Zc s4}
mZ{ } // Replace each character Z in the compressed string with the following:
Zc // Take the char-code of Z.
s4 // Convert to a base-4 string.
หลังจากคลายการบีบอัดสตริงที่บีบอัดขนาด 13 ไบต์จะมีลักษณะดังนี้:
3131332333332111200122213333313321011121213133133133
โปรดทราบว่าการดำเนินการนี้จะล้มเหลวหากมีการเริ่มต้นด้วย0
เลข4 หลักใดเนื่องจากเลขศูนย์นำหน้าจะถูกปล่อยออกเมื่อs4
รัน เราสามารถแก้ไขปัญหานี้ได้โดยการ0
เป็นตัวแทน#
ซึ่งจะปรากฏขึ้นสามครั้งเท่านั้นและไม่มีการตกในช่วงเริ่มต้นของการวิ่ง 4 หลัก
s2 // Slice off the first two chars of the result.
โอเคดังนั้นเพื่อให้ได้สาย 50 หลักของเราที่จะบีบอัดอย่างดีในชิ้นของ 4 เราต้องเพิ่มสองหลักพิเศษ เพิ่มพวกเขาไปยังจุดเริ่มต้นของสตริงหมายถึงการที่เราสามารถสับพวกเขาออกด้วยที่ byter ¤
หนึ่ง
ëAU // Take every 10th (A) char in this string, starting at index <input> (U).
น่าอาย Japt ไม่มี built-in ในการแยกสตริงออกเป็นชิ้น ๆ ยาว X มันมี built-in สำหรับรับ Xth char ทุกตัวดังนั้นเราจึงสามารถเก็บข้อมูลทั้งหมดโดยการเข้ารหัสแถวบนสุดทั้งหมดก่อนจากนั้น แถวที่สองทั้งหมด ฯลฯ
ดังนั้นตอนนี้เรามีสตริงที่ 5 หลักเข้ารหัสหลักที่เราต้องการที่จะสร้างเช่นสำหรับ32223
0
q mX{2839s2 ë4X} qR
q // Split the resulting string into chars.
mX{ } // Replace each char X with the result of this function:
2839s2 // Convert the magic number 2839 to a binary string.
ë4X // Take every 4th char of this string, starting at index X.
qR // Join the result with newlines.
เพื่ออธิบายหมายเลขเวทมนต์ให้อ้างอิงกลับไปยังสี่แถวที่แตกต่างกัน หากคุณแทนที่#
ด้วย1
และ
ด้วย0
คุณจะได้รับ
100
001
101
111
transposing 101100010111
นี้และจากนั้นก็เข้าร่วมเป็นสายเดียวจะช่วยให้เรา แปลงเป็นทศนิยมและในขณะนี้คุณมี 2839 การย้อนกลับกระบวนการแมปตัวเลข0123
ลงในสี่แถวไบนารีที่แสดงด้านบน
เกือบเสร็จแล้ว! ตอนนี้สิ่งที่เหลืออยู่ให้ทำคือการเพิ่มในช่องว่างและหลัก:
d0S1U // In the resulting string, replace 0 with " " (S) and 1 with <input> (U).
และ presto เอาท์พุทโดยปริยายจะดูแลส่วนที่เหลือ ฉันขอโทษคำอธิบายนี้ยาวมาก แต่ฉันไม่เห็นวิธีการเล่นกอล์ฟที่แท้จริงโดยไม่ทำให้เข้าใจน้อยลง (ถ้าเข้าใจ ... )