सीजाम, 77 71 70 69 63 62 बाइट्स
r_,5*_Sa*a*\{~"÷Ðëúܾ¿ðÿþ"=i2bS"\/"4*W<+.*3/..e>2fm>2m>}/Wf%N*
सभी वर्ण मुद्रण योग्य हैं, इसलिए कॉपी और पेस्ट ठीक काम करना चाहिए।
CJam दुभाषिया में इसे ऑनलाइन आज़माएं ।
विचार
हम अंकों की संख्या का परीक्षण करके शुरू n इनपुट में और रिक्त स्थान काफी बड़ा उत्पादन को कवर करने के एक वर्ग धक्का। कार्यान्वयन में, यह वर्ग एक-वर्ण स्ट्रिंग्स के दो-आयामी सरणी के रूप में एन्कोड किया जाएगा।
लंबाई 2n + 1 का एक वर्ग सिर्फ सही होगा (यानी, कोई आसपास का व्हाट्सएप) एक सीधा कार्यान्वयन के लिए नहीं, लेकिन हम लंबाई 5n में से एक का उपयोग करेंगे बाइट्स के एक जोड़े को बचाने के लिए से । शुक्र है, आसपास के व्हाट्सएप की अनुमति है।
यदि हम 8 के सात स्लैश प्रतिनिधित्व की रेखाओं को उल्टा करते हैं , तो हम निम्नलिखित प्राप्त करते हैं:
\/
\/\
/\
सभी अंकों का प्रतिनिधित्व 8-बिट पूर्णांक के रूप में एन्कोड किया जा सकता है, जहां i th बिट 0 है यदि i th वर्ण को एक स्थान के साथ प्रतिस्थापित किया जाना चाहिए। अंक 0 से 9 के लिए , परिणामी पूर्णांक हैं
247 208 235 250 220 190 191 240 255 254
जो निम्नलिखित ISO-8559-1 अक्षरों के अनुरूप है:
÷Ðëúܾ¿ðÿþ
इनपुट में प्रत्येक अंक के लिए, इसी 8 बिट पूर्णांक चयन करने के बाद, हम मैं दोहराने वीं के प्रतिनिधित्व के चरित्र 8 वास्तव में एक मैं बार है, जहां एक मैं है मैं वें पूर्णांक के बिट। यह या तो एक या शून्य वर्ण के तारों की एक सरणी को धक्का देता है। इस सरणी को लंबाई 3 के भाग में विभाजित करके, हम एक सरणी प्राप्त करते हैं जहां प्रत्येक तत्व प्रतिनिधित्व की एक पंक्ति से मेल खाता है।
अब, हम वर्टिकल के अधिकतम स्ट्रिंग्स की गणना करते हैं जो वर्ग का प्रतिनिधित्व करते हैं और स्ट्रिंग्स जो अंक का प्रतिनिधित्व करते हैं। तार /
और \
स्ट्रिंग से भी बड़ा कर रहे हैं
, ताकि वे वर्ग में रिक्त स्थान की जगह लेगा। खाली स्ट्रिंग, हालांकि, स्ट्रिंग से छोटी है
, इसलिए अंक प्रतिनिधित्व में खाली तार वर्ग में रिक्त स्थान को संरक्षित करेंगे।
अब हम वर्ग के उचित भाग में निम्नलिखित अंक प्रतिनिधित्व को रखने के लिए दो इकाइयों द्वारा पंक्तियों और स्तंभों को घुमाते हैं और इनपुट में शेष अंकों के लिए प्रक्रिया को दोहराते हैं।
अंत में, हम प्रत्येक पंक्ति को उल्टा करते हैं और अलग-अलग पंक्तियों के बीच एक लाइनफ़ीड सम्मिलित करते हैं।
कोड
r_, e# Read a token from STDIN and push the length of a copy.
5*_ e# Multiply the length by 5 and push a copy.
Sa* e# Repeat the array [" "] that many times.
a* e# Repeat the array [[" " ... " "]] that many times.
\{ e# For each character C in the input:
~ e# Push eval(C), i.e., the digit the character represents.
"÷Ðëúܾ¿ðÿþ"
e# Push the encodings of all 10 seven slash representations.
= e# Select the proper one.
i2b e# Push the resulting characters code point in base 2, i.e., its bits.
S e# Push " ".
"\/"4* e# Push "\/\/\/\/".
+W< e# Concatenate and eliminate the last character.
.* e# Vectorized repetition.
e# For the digit 5, e.g., we have [1 0 1 1 1 1 1 0] and " \/\/\/\" on
e# the stack, so .* yields [" " "" "/" "\" "/" "\" "/" ""].
3/ e# Divide the representation into chunks of length 3, i.e., its lines.
..e> e# Compute the twofold vectorized maximum, as explained above.
2fm> e# Rotate each line to characters to the right.
2m> e# Rotate the lines two units down.
}/
Wf% e# Reverse each line.
N* e# Place linefeeds between them.
अंतिम घुमाव आउटपुट को गड़बड़ कर देगा अगर वर्ग की लंबाई 2n + 3 से छोटी थी । सभी सकारात्मक पूर्णांकों n के लिए 5n 5 2n + 3 के बाद से , वर्ग इसे रोकने के लिए काफी बड़ा है।