MCPcopy Index your code
hub / github.com/TheAlgorithms/JavaScript / convertArbitraryBaseBigIntVersion

Function convertArbitraryBaseBigIntVersion

Conversions/ArbitraryBase.js:73–117  ·  view source on GitHub ↗
(
  stringInBaseOne,
  baseOneCharacterString,
  baseTwoCharacterString
)

Source from the content-addressed store, hash-verified

71 * @returns {string}
72 */
73const convertArbitraryBaseBigIntVersion = (
74 stringInBaseOne,
75 baseOneCharacterString,
76 baseTwoCharacterString
77) => {
78 if (
79 [stringInBaseOne, baseOneCharacterString, baseTwoCharacterString]
80 .map((arg) => typeof arg)
81 .some((type) => type !== 'string')
82 ) {
83 throw new TypeError('Only string arguments are allowed')
84 }
85
86 const baseOneCharacters = [...baseOneCharacterString]
87 const baseTwoCharacters = [...baseTwoCharacterString]
88
89 for (const charactersInBase of [baseOneCharacters, baseTwoCharacters]) {
90 if (charactersInBase.length !== new Set(charactersInBase).size) {
91 throw new TypeError(
92 'Duplicate characters in character set are not allowed'
93 )
94 }
95 }
96 const reversedStringOneChars = [...stringInBaseOne].reverse()
97 const stringOneBase = BigInt(baseOneCharacters.length)
98 let value = 0n
99 let placeValue = 1n
100 for (const digit of reversedStringOneChars) {
101 const digitNumber = BigInt(baseOneCharacters.indexOf(digit))
102 if (digitNumber === -1n) {
103 throw new TypeError(`Not a valid character: ${digit}`)
104 }
105 value += digitNumber * placeValue
106 placeValue *= stringOneBase
107 }
108 const outputChars = []
109 const stringTwoBase = BigInt(baseTwoCharacters.length)
110 while (value > 0n) {
111 const divisionResult = value / stringTwoBase
112 const remainder = value % stringTwoBase
113 outputChars.push(baseTwoCharacters[remainder])
114 value = divisionResult
115 }
116 return outputChars.reverse().join('') || baseTwoCharacters[0]
117}
118
119export { convertArbitraryBase, convertArbitraryBaseBigIntVersion }

Callers 1

Calls 3

reverseMethod · 0.80
indexOfMethod · 0.45
pushMethod · 0.45

Tested by

no test coverage detected