स्थिरांक को निर्दिष्ट करने के लिए J भाषा में बहुत मूर्खतापूर्ण वाक्यविन्यास है । मैं विशेष रूप से एक शांत सुविधा पर ध्यान केंद्रित करना चाहता हूं: मनमाने ठिकानों में लिखने की क्षमता।
आप लिखते हैं XbY
के लिए X
किसी भी संख्या और Y
अक्षर या अंक के किसी भी स्ट्रिंग, तो जम्मू की व्याख्या करेगा Y
एक आधार के रूप X
नंबर है, जहां 0
के माध्यम से 9
अपने सामान्य अर्थ है और a
के माध्यम से z
35 के माध्यम से 10 प्रतिनिधित्व करते हैं।
और जब मैं X
कोई संख्या कहता हूं , तो मेरा मतलब किसी भी संख्या से है। इस प्रश्न के प्रयोजनों के लिए, मैं X
एक सकारात्मक पूर्णांक बनने के लिए विवश हूं , लेकिन जम्मू में आप कुछ भी उपयोग कर सकते हैं: नकारात्मक संख्या, भिन्न, जटिल संख्या, जो भी हो।
अजीब बात यह है कि आप केवल 0 से 35 तक के अंकों का उपयोग अपने आधार के रूप में कर सकते हैं-जो भी अंक हों, क्योंकि आपके प्रयोग करने योग्य प्रतीकों का संग्रह केवल 0-9 और az के होते हैं ।
समस्या
मैं इस पद्धति का उपयोग करके मुझे 2,933,774,030,998 जैसे गोल्फ मैजिक नंबर की मदद करने के लिए एक कार्यक्रम चाहता हूं । ठीक है, ठीक है, शायद इतना बड़ा नहीं है, मैं आप पर आसान हो जाऊंगा। इसलिए...
आपका काम एक कार्यक्रम या समारोह जो एक (आमतौर पर बड़े) दशमलव संख्या लेता है लिखना है
N
1 और +४२९४९६७२९५ (= 2 के बीच 32 इनपुट के रूप में -1), और आउटपुट / रिटर्न फार्म के कम से कम प्रतिनिधित्वXbY
है, जहांX
, एक सकारात्मक पूर्णांक हैY
है अल्फ़ान्यूमेरिक्स (0-9 और az, केस असंवेदनशील) से युक्त एक स्ट्रिंग, औरY
बेसX
बराबरी में व्याख्या की गईN
।यदि प्रत्येक प्रतिनिधित्व
XbY
प्रतिनिधित्व की लंबाई अंकों की संख्या से अधिक या उसके बराबर हैN
, तोN
इसके बजाय आउटपुट । अन्य सभी संबंधों में, आप कम से कम प्रतिनिधित्व के किसी भी गैर-रिक्त सबसेट का उत्पादन कर सकते हैं।
यह कोड गोल्फ है, इसलिए कम बेहतर है।
परीक्षण के मामलों
Input | Acceptable outputs (case-insensitive)
------------+-------------------------------------------------------
5 | 5
|
10000000 | 79bkmom 82bibhi 85bgo75 99bauua 577buld
| 620bq9k 999baka
|
10000030 | 85bgo7z
|
10000031 | 10000031
|
12345678 | 76bs9va 79bp3cw 82bmw54 86bjzky 641buui
|
34307000 | 99bzzzz
|
34307001 | 34307001
|
1557626714 | 84bvo07e 87brgzpt 99bglush 420blaze
|
1892332260 | 35bzzzzzz 36bvan8x0 37brapre5 38bnxkbfe 40bij7rqk
| 41bgdrm7f 42bek5su0 45bablf30 49b6ycriz 56b3onmfs
| 57b38f9gx 62b244244 69b1expkf 71b13xbj3
|
2147483647 | 36bzik0zj 38br3y91l 39bnvabca 42bgi5of1 48b8kq3qv
(= 2^31-1) | 53b578t6k 63b2akka1 1022b2cof 1023b2661 10922bio7
| 16382b8wv 16383b8g7 32764b2gv 32765b2ch 32766b287
| 32767b241
|
2147483648 | 512bg000 8192bw00
|
4294967295 | 45bnchvmu 60b5vo6sf 71b2r1708 84b12mxf3 112brx8iv
(= 2^32-1) | 126bh5aa3 254b18owf 255b14640 1023b4cc3 13107bpa0
| 16383bgwf 21844b9of 21845b960 32765b4oz 32766b4gf
| 32767b483 65530b1cz 65531b1ao 65532b18f 65533b168
| 65534b143 65535b120
यदि आप कभी इस बारे में अनिश्चित हैं कि क्या कुछ प्रतिनिधित्व कुछ संख्या के बराबर है, तो आप किसी भी जे इंटरप्रेटर का उपयोग कर सकते हैं, जैसे कि यह ऑनलाइन प्रयास करें । बस टाइप करें stdout 0":87brgzpt
और जम्मू वापस थूक देगा 1557626714
। ध्यान दें कि J केवल लोअरकेस को स्वीकार करता है, भले ही यह समस्या केस-असंवेदनशील हो।
कुछ संभवतः सहायक सिद्धांत
N
10,000,000 से कम सभी के लिए , दशमलव प्रतिनिधित्व किसी भी अन्य के रूप में छोटा है और इसलिए केवल स्वीकार्य आउटपुट है। किसी भी चीज़ को सहेजने के लिए आपको नए आधार में कम से कम चार अंक कम होने चाहिए, और इससे भी अधिक यदि आधार 99 से अधिक हो।- यह वर्गमूल की छत तक आधारों की जांच करने के लिए पर्याप्त है
N
। किसी भी बड़े आधार के लिए बी ,N
आधार में सबसे अधिक दो अंक पर होगा बी , तो पहली बार जब आप एक वैध पहले अंक के साथ कुछ चारों ओर पर है मिल जाएगा बी ≈N
/ 35। लेकिन उस आकार में आप हमेशा दशमलव प्रतिनिधित्व के रूप में कम से कम बड़े होंगे, इसलिए कोशिश करने का कोई मतलब नहीं है। यह ध्यान में रखते हुए, छत (sqrt (सबसे बड़ी संख्या मैं आपको इस समस्या को हल करने के लिए कहूंगा) = 65536। - यदि आपके पास 36 से कम आधार में कोई प्रतिनिधित्व है, तो आधार 36 का प्रतिनिधित्व कम से कम होगा। इसलिए आपको 36 से कम आधारों में गलती से कम समाधान के बारे में चिंता करने की ज़रूरत नहीं है। उदाहरण के लिए,
35bzzzzzz
1,892,332,260 के लिए प्रतिनिधित्व उस आधार के लिए एक असामान्य अंक का उपयोग करता है, लेकिन36bvan8x0
इसकी लंबाई समान है।