फंकिटॉन , 4322 - 50% = 2161
वास्तव में यहां गोल्फ की कोशिश नहीं की जा रही है। ब्यूटी एंगल के लिए ज्यादा जाना। मुझे लगता है कि मुख्य कार्यक्रम वास्तव में साफ-सुथरा दिखता है, एक सही पर आयताकार बॉक्स दूर से टिक गया।
हमेशा की तरह, आप $('pre').css('line-height',1)
अपने ब्राउज़र कंसोल में निष्पादित करके एक बेहतर प्रतिपादन प्राप्त कर सकते हैं ।
┌─────────────────────────┐
┌─┴─╖ ┌─┴─╖
┌────────┤ · ╟─────────────────────┤ · ╟─────────────┐ ╔═════════╗ ╔════╗ ╔════╗
│ ╘═╤═╝ ╔═════════╗ ╘═╤═╝ ╓───╖ │ ║ 1257283 ║ ┌─╢ 40 ║ ║ 25 ║
│ │ ║ 2097151 ║ ├───╢ ʫ ╟───┐ │ ║ 6456094 ║ │ ╚════╝ ╚══╤═╝
┌─┴─╖ │ ╚════╤════╝ ┌─┴─╖ ╙─┬─╜ ┌─┴─╖ │ ║ 8219021 ║ │ ┌───╖ ┌─┴─╖
┌───┤ · ╟────────┴────┐ └─────┬────┤ · ╟───┴───┤ · ╟─┤ ║ 4660190 ║ └──┤ × ╟───┤ % ║
│ ╘═╤═╝ │ ┌┴┐ ╘═╤═╝ ╘═╤═╝ │ ╚════════╤╝ ╘═╤═╝ ╘═╤═╝
│ │ │ └┬┘ │ │ │ ╔═══╗ ┌─┴─╖ ┌──┴─╖ ╔═╧═╗
│ │ ╔═══╗ ┌────╖ │ ┌─┴─╖ ┌┐ │ │ │ ║ 8 ╟──┤ ʫ ╟──┤ >> ║ ║ ║
│ │ ║ 1 ╟─┤ >> ╟─┘ ┌───┤ ? ╟─┤├─┤ │ │ ╚═══╝ ╘═╤═╝ ╘══╤═╝ ╚═══╝
│ │ ╚═══╝ ╘══╤═╝ │ ╘═╤═╝ └┘ │ │ │ ╔════════════════╧═════════╗
│ │ ┌─┴─╖ ┌───╖ ┌─┴─╖ ┌─┴─╖ ╔═╧═╗ │ │ ║ 609678112368778425678534 ║
│ ┌─┴─────────┤ ʫ ╟─┤ ‼ ╟─┤ · ╟─┤ ‼ ║ ║ 1 ║ │ │ ║ 616189712722605554111376 ║
│ │ ╘═╤═╝ ╘═╤═╝ ╘═╤═╝ ╘═╤═╝ ╚═══╝ │ │ ║ 461573643915077926310571 ║
│ │ │ │ │ ╔═╧══╗ │ │ ║ 355541007599150245813976 ║
│ │ ╔══════╗ │ │ └───╢ 45 ║ │ │ ║ 426564826002362964111793 ║
│ │ ║ 2097 ║ │ ┌─┴─╖ ┌───╖ ╚════╝ │ │ ║ 714054902293682079346275 ║
│ │ ║ 1565 ║ └───┤ · ╟─┤ ♭ ╟─┐ │ │ ║ 663973372550500581508544 ║
│ │ ╚═╤════╝ ╘═╤═╝ ╘═══╝ ├────────────────────┘ │ ║ 874263187322344354338195 ║
│ │ ┌─┴─╖ ┌─┴─╖ │ │ ║ 642609790172899326178321 ║
│ │ │ ‼ ╟─────────┤ ? ╟───────┘ │ ║ 071643306454414932126243 ║
│ │ ╘═╤═╝ ╘═╤═╝ │ ║ 308860823981077902637848 ║
│ ┌─┴─╖ ┌─┴─╖ ╔═══╗ ┌─┴─╖ │ ║ 322657399386789617074176 ║
└─┤ · ╟─┤ ʫ ╟─╢ 8 ║ ┌─┤ ? ╟────────────────────────────────┘ ╚══════════════════════════╝
╘═╤═╝ ╘═╤═╝ ╚═══╝ │ ╘═╤═╝
│ ┌───┴╖ ╔════╗ │ ╔═══╗
└─┤ >> ╟─╢ 21 ║ └─╢ 0 ║
╘════╝ ╚════╝ ╚═══╝
Funciton कार्यों एक भी, अजीब, शायद ही कभी इस्तेमाल किया यूनिकोड वर्ण से मिलकर नाम देने की परंपरा में जारी रखते हुए, मैं क्या सबसे अच्छा इस चुनौती का प्रतिनिधित्व कर सकता है के बारे में सोचा है, और यह मेरे लिए हुआ है कि लिंक और ज़ेल्डा (या, अगर आप चाहते हैं, कथा की ज़ेल्डा ) आपको एलजेड देता है , इसलिए लोअर-केस डिग्राफ U (U + 02AB, ʟᴀᴛɪɴ sᴍᴀʟʟ ᴅɪɢʀᴀᴘʜ L L) उपयुक्त लगता है।
व्याख्या
जैसा कि एसोलैंग्स लेख में बताया गया है, फ़नसीटन प्रोग्राम इनपुट को इनकोडेड के रूप में प्राप्त करता है, जिसे मैं "यूटीएफ -21" कहूंगा, लेकिन एक एकल विनम्र पूर्णांक के रूप में। अगर मैं इस नंबर को हैशमैप (शब्दकोश, साहचर्य सरणी) की कुंजी के रूप में उपयोग करना चाहता था, तो मुझे एक हैश फ़ंक्शन की आवश्यकता होगी जो दो मानदंडों को पूरा करे: एक, यह फनसिटोन में लागू करने के लिए पर्याप्त सरल है, और दो, सभी 13 की उम्मीद है इनपुट स्ट्रिंग्स एक अलग हैश मान देते हैं। सबसे सरल हैश फ़ंक्शन मैं सोच सकता था input % m
कि कुछ मूल्य के लिए m
। इसलिए, मैंने m
= 13, 14, 15 आदि की कोशिश की , जब तक कि मुझे सबसे छोटा पूर्णांक नहीं मिला, जिसके लिए सभी हैश मूल्य अद्वितीय हैं। यह संख्या 25 है।
हैश मान हैं:
zel = 6
sas = 19
eps = 10
sos = 22
sot = 1
sst = 9
mof = 14
bof = 3
sow = 13
nos = 17
ros = 21
pol = 16
scs = 23
हम प्रत्येक गीत को एक बिट की उपस्थिति या अनुपस्थिति का प्रतिनिधित्व करते हुए सांकेतिक शब्दों में बदलना करते हैं। उदाहरण के लिए, ज़ेल्डा की लोरी को निम्नानुसार एन्कोड किया जाएगा:
---^-----^------- = 01001000
-<-----<--------- = 10010000
----->----->----- = 00100100
----------------- = 00000000
----------------- = 00000000
सिवाय इसके कि बिट्स विपरीत क्रम में हैं; शीर्ष बाईं सेल कम से कम महत्वपूर्ण बिट में है। इसका मतलब है कि हर गीत 40 बिट लंबा है।
हम इस प्रकार 40 × 25 = 1000-बिट संख्या लेकर और हैश मान के अनुसार सही जगह पर प्रत्येक गीत के लिए बिट पैटर्न रखकर एक (मामूली विरल) हैश तालिका बनाते हैं। कार्यक्रम में राक्षसी संख्या वास्तव में यह हैश तालिका है।
यहां बताया गया है कि शेष संख्याओं में से प्रत्येक का क्या अर्थ है:
45
= 0x2D
के लिए यूनिकोड है -
।
1257283645609482190214660190
: यह ^<>VA
UTF-21 में स्ट्रिंग है। हंडसाइट में मैं प्रति वर्ण 7 बिट्स का उपयोग कर सकता था, जिससे संख्या कम हो जाती है, लेकिन UTF-21 फ़नसिटॉन में इतना गहरा पारंपरिक है कि यह मेरे लिए बस नहीं हुआ।
2097151
= 0x1FFFFF
= (1 << 21) - 1. उपरोक्त स्ट्रिंग से पहला वर्ण प्राप्त करने के लिए प्रयुक्त।
20971565
: यह वह स्ट्रिंग है -\n
, जिसे प्रत्येक पंक्ति के अंत में जोड़ा जाता है।
- यह उत्सुक लग सकता है कि यह संख्या और पिछला समान समान है, लेकिन अगर आप इसके बारे में सोचते हैं, तो ऐसा इसलिए है क्योंकि हम दशमलव और यूनिकोड का उपयोग कर रहे हैं
\n
10. ऐसा होता है। अंतिम संख्या (10 << 21) + 45 है।
कार्यक्रम अब आगे बढ़ता है:
- मुख्य कार्यक्रम
ʫ
निम्नलिखित 3 मापदंडों के साथ कहता है :
- बी : हैश तालिका, इनपुट के हैश मान से 40 बिट गुणा सही स्थानांतरित हुई। जिस गीत को हम आउटपुट करना चाहते हैं वह अब 40 सबसे महत्वपूर्ण बिट्स में है।
- c : स्ट्रिंग
^<>VA
।
- a : संख्या 8।
- के प्रत्येक पुनरावृत्ति में
ʫ
,
- यदि ग खाली नहीं है,
- अगर एक शून्य, के नीचे बिट पर नज़र नहीं है बी । आउटपुट
-
, दूसरे के बाद -
अगर यह शून्य है या अन्यथा सी का पहला चरित्र है । एक बिट को हटाने के लिए एक से दाएं B को शिफ्ट करें और एक को घटाएं ।
- अगर एक शून्य, उत्पादन होता है
-\n
, तो से पहले वर्ण बंद काटना सी और के साथ एक और पाश शुरू एक = 8।
- अगर सी खाली है, तो हम कर रहे हैं।