यह लगभग a cross post from Math SE है - जबकि मेरी समस्या का स्पष्टीकरण समान है, Math.SE पर मैं अपनी समस्या का गणितीय समाधान मांग रहा था।जावास्क्रिप्ट में एक अद्वितीय संख्या में वर्णों की एक अद्वितीय स्ट्रिंग को परिवर्तित करने का कोई आसान तरीका है?
मेरी समस्या यह है कि मैथ.एस. पर जो समाधान मिला, वह "बेस 35 में परिवर्तित हो गया" जो शायद एक बहुत अच्छा जवाब है, लेकिन मैं गणित के साथ वास्तव में भयानक हूं और समझ में नहीं आता कि मेरे समाधान में कैसे आवेदन करें कोड। मैंने a lesson on converting to different bases को देखने की कोशिश की, और यह मेरे लिए बहुत भ्रमित है। यहां तक कि a question about converting numbers to bases in JavaScript को भी देखकर यह स्पष्ट नहीं हुआ कि मुझे क्या करना है इसके लिए मैं इसका उपयोग कैसे करूंगा।
क्या जावास्क्रिप्ट में इसे संभालने का कोई आसान तरीका है? यहां पूरा प्रश्न है:
मेरे पास असामान्य प्रोग्रामिंग समस्या है और इसके गणित पक्ष ने मुझे स्टंप कर दिया है।
मैंने सात पात्रों की एक अनूठी स्ट्रिंग जेनरेट की है जो प्रत्येक संभावनाओं से यादृच्छिक रूप से चुने गए हैं: ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789
उदाहरण के लिए A6HJ92B
और मुझे इसे एक अद्वितीय संख्या मान में बदलने की आवश्यकता है। परिवर्तित होने पर, इस यादृच्छिक स्ट्रिंग के दो संस्करण नाम संख्या नहीं हो सकते हैं।
मैं मूल आईडी में अक्षरों को शामिल करने के बजाय सिर्फ एक संख्या उत्पन्न कर सकता हूं, लेकिन निश्चित रूप से इसका मतलब है कि मुझे अपनी स्ट्रिंग की लंबाई बढ़ाना है, और यह संभव है कि मेरे एप्लिकेशन का उपयोगकर्ता इस स्ट्रिंग को टाइप करना चाहे, क्योंकि यह किसी एप्लिकेशन में अपने "सत्र" की पहचान करता है, इसलिए मैं इसे छोटा रखना चाहता हूं।
तो मेरा विचार इस तरह की एक तालिका का निर्माण करना था:
A : 1,
B : 2,
C : 3,
D : 4,
E : 5,
F : 6,
G : 7,
H : 8,
... you get the idea ...
5 : 31,
6 : 32,
7 : 33,
8 : 34,
9 : 35
और फिर मैं संख्या के सभी जोड़ना होगा ...
A6HJ92B
:
A : 1
6 : 32
H : 8
J : 10
9 : 35
2 : 28
B : 2
1+32+8+10+35+28+2 = 116
... लेकिन मुझे एहसास हुआ कि यह एक दोषपूर्ण विचार है क्योंकि कई possib ले तार "टक्कर" या एक ही संख्या के बराबर होगा। मुझे एक अद्वितीय संख्या के बराबर करने के लिए प्रत्येक अद्वितीय स्ट्रिंग की आवश्यकता है।
तो अगर मैंने प्रत्येक चरित्र के मूल्य (1*32*8*10*35*28*2 = 5,017,600
) को गुणा किया, तो भी मुझे लगता है कि वहां संभावित टकराव भी हो सकते हैं।
क्या इस तरह की गणना करने का कोई तरीका है टकराव को समाप्त करता है? अगर टकराव समाप्त नहीं किया जा सकता है, तो मैं उन्हें कम करने के लिए किस विधियों का उपयोग कर सकता हूं?
bignumber.js के बारे में कैसे? https://mikemcl.github.io/bignumber।जेएस/ एक त्वरित पहेली बनाया: https://jsfiddle.net/7u0c2ddp/ –
ऐसे रूपांतरण के असीमित तरीके हैं। सबसे आसान तरीका यह है: आपको पहले से ही स्मृति में अपनी स्ट्रिंग को शून्य और एक के रूप में प्रस्तुत करना होगा। बस इसे एक लंबी बाइनरी संख्या के रूप में देखें। –
@IvanKuckir यह देखते हुए कि वर्णों का एक सीमित सेट है, तारों की संख्या सीमित है, और जेएस संख्याओं में स्मृति की सीमित मात्रा का उपयोग करके संग्रहीत किया जाता है, मुझे नहीं लगता कि रूपांतरण करने के अनंत तरीके हैं। वास्तव में उनमें से बहुत सारे हैं, हालांकि। – Oriol