अच्छा आधार
एक पूर्णांक num के लिए, हम k (k >= 2) को num का अच्छा आधार कहते हैं, यदि num के आधार k में सभी अंक 1 हैं।
उदाहरण के लिए: 13 आधार 3 है 111, इसलिए 3, num = 13 के लिए एक अच्छा आधार है।
समस्या
हमें एक JavaScript फ़ंक्शन लिखना है जो एक संख्या को दर्शाने वाली स्ट्रिंग str को एकमात्र आर्ग्युमेंट के रूप में लेता है। फ़ंक्शन को str के लिए सबसे छोटी संभव संख्या का स्ट्रिंग प्रतिनिधित्व वापस करना चाहिए जो एक अच्छा आधार हो।
उदाहरण
यदि फ़ंक्शन का इनपुट है:
const str = "4681";
तो आउटपुट होना चाहिए:
const output = "8";
आउटपुट व्याख्या:
क्योंकि 4681 आधार 8 है 11111
कोड
const str = "4681"; const smallestGoodBase = (n = '1') => { const N = BigInt(n), bigint2 = BigInt(2), bigint1 = BigInt(1), bigint0 = BigInt(0) let maxLen = countLength(N, bigint2) // result at most maxLen 1s const findInHalf = (length, smaller = bigint2, bigger = N) => { if (smaller > bigger){ return [false]; }; if (smaller == bigger) { return [valueOf1s(smaller, length) == N, smaller] }; let mid = (smaller + bigger) / bigint2; let val = valueOf1s(mid, length); if(val == N){ return [true, mid]; }; if (val > N){ return findInHalf(length, smaller, mid - bigint1); }; return findInHalf(length, mid + bigint1, bigger); }; for (let length = maxLen; length > 0; length--) { let [found, base] = findInHalf(length); if(found){ return '' + base; } }; return '' + (N - 1); function valueOf1s(base, lengthOf1s) { let t = bigint1 for (let i = 1; i < lengthOf1s; i++) { t *= base t += bigint1 } return t } function countLength(N, base) { let t = N, len = 0 while (t > bigint0) { t /= base len++ } return len } }; console.log(smallestGoodBase(str));आउटपुट
कंसोल में आउटपुट होगा:
8