Skip to content

Commit cff0f16

Browse files
authored
1 parent 6aa3314 commit cff0f16

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

Conversions/ArbitraryBase.js

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,19 @@
55
* @param {string} baseTwoCharacters Character set for the output base
66
* @returns {string}
77
*/
8-
const convertArbitraryBase = (stringInBaseOne, baseOneCharacters, baseTwoCharacters) => {
9-
if ([stringInBaseOne, baseOneCharacters, baseTwoCharacters].map(arg => typeof arg).some(type => type !== 'string')) {
8+
const convertArbitraryBase = (stringInBaseOne, baseOneCharacterString, baseTwoCharacterString) => {
9+
if ([stringInBaseOne, baseOneCharacterString, baseTwoCharacterString].map(arg => typeof arg).some(type => type !== 'string')) {
1010
throw new TypeError('Only string arguments are allowed')
1111
}
12-
[baseOneCharacters, baseTwoCharacters].forEach(baseString => {
13-
const charactersInBase = [...baseString]
12+
13+
const baseOneCharacters = [...baseOneCharacterString]
14+
const baseTwoCharacters = [...baseTwoCharacterString]
15+
16+
for (const charactersInBase of [baseOneCharacters, baseTwoCharacters]) {
1417
if (charactersInBase.length !== new Set(charactersInBase).size) {
1518
throw new TypeError('Duplicate characters in character set are not allowed')
1619
}
17-
})
20+
}
1821
const reversedStringOneChars = [...stringInBaseOne].reverse()
1922
const stringOneBase = baseOneCharacters.length
2023
let value = 0
@@ -31,11 +34,11 @@ const convertArbitraryBase = (stringInBaseOne, baseOneCharacters, baseTwoCharact
3134
const stringTwoBase = baseTwoCharacters.length
3235
while (value > 0) {
3336
const remainder = value % stringTwoBase
34-
stringInBaseTwo = baseTwoCharacters.charAt(remainder) + stringInBaseTwo
37+
stringInBaseTwo = baseTwoCharacters.at(remainder) + stringInBaseTwo
3538
value /= stringTwoBase
3639
}
37-
const baseTwoZero = baseTwoCharacters.charAt(0)
38-
return stringInBaseTwo.replace(new RegExp(`^${baseTwoZero}+`), '')
40+
const baseTwoZero = baseTwoCharacters.at(0)
41+
return stringInBaseTwo.replace(new RegExp(`^${baseTwoZero}+`, 'u'), '')
3942
}
4043

4144
export { convertArbitraryBase }
@@ -48,3 +51,6 @@ export { convertArbitraryBase }
4851

4952
// > convertArbitraryBase('129', '0123456789', '01234567')
5053
// '201'
54+
55+
// > convertArbitraryBase('98', '0123456789', '💝🎸🦄')
56+
// '🎸💝🎸🦄🦄'

0 commit comments

Comments
 (0)