जाप , 43 बाइट्स
"Ýûÿ©ÿßY÷ß"®c s4äëAU ¬£2839¤ë4X÷d0S1U
कुछ unprintables शामिल हैं। इसे ऑनलाइन आज़माएं!
टैली: संपीड़ित डेटा के 13 बाइट्स, इसे विघटित करने के लिए 9 बाइट्स, और आउटपुट बनाने के लिए 21 बाइट्स।
व्याख्या
अघोषित कोड:
"Ýûÿ©ÿß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
ध्यान दें कि यह विफल हो जाएगा यदि 4 अंकों में से कोई भी रन के साथ शुरू होता है 0
, क्योंकि अग्रणी शून्य s4
को चलाने के दौरान छोड़ दिया जाएगा । हम इसका 0
प्रतिनिधित्व करते हुए इसे ठीक कर सकते हैं #
, जो केवल तीन बार दिखाई देता है, और उनमें से कोई भी 4 अंकों के रन की शुरुआत में नहीं आता है।
s2 // Slice off the first two chars of the result.
ठीक है, इसलिए 4 के क्रम में अच्छी तरह से संपीड़ित करने के लिए हमारे 50-अंकीय स्ट्रिंग प्राप्त करने के लिए, हमें दो अतिरिक्त अंक जोड़ना होगा। उन्हें स्ट्रिंग की शुरुआत में जोड़ने का मतलब है कि हम उन्हें एक-बटर के साथ काट सकते हैं ¤
।
ëAU // Take every 10th (A) char in this string, starting at index <input> (U).
ताज्जुब की बात है कि, Japt में X की लंबाई के स्लाइस में एक स्ट्रिंग को विभाजित करने के लिए बिल्ट-इन का अभाव है। इसमें हर 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
इसे ट्रांसपोज़ करना और फिर सिंगल स्ट्रिंग में शामिल होना हमें देता है 101100010111
। दशमलव और ध्वनि में परिवर्तित करें, आपके पास 2839 हैं। प्रक्रिया को उलट कर अंकों को मैप करता है0123
को ऊपर दिखाए गए चार बाइनरी पंक्तियों में है।
लगभग हो गया! अब बस इतना करना बाकी है कि रिक्त स्थान और अंकों में जोड़ दिया जाए:
d0S1U // In the resulting string, replace 0 with " " (S) and 1 with <input> (U).
और प्रेस्टो, निहित उत्पादन बाकी की देखभाल करता है। मुझे खेद है कि यह स्पष्टीकरण इतना लंबा है, लेकिन मुझे इसे कम समझने योग्य बनाने के लिए इसे (यदि यह समझ में आता है, तो बिना इसे समझने के लिए कोई वास्तविक तरीका नहीं दिखता ...)