@@ -277,42 +277,33 @@ function base2base(srcAlphabet, dstAlphabet) {
277277 var noDifference = srcAlphabet === dstAlphabet ,
278278 srcAlphabet = [ ...new Set ( [ ...srcAlphabet ] . join ( '' ) ) ] ,
279279 dstAlphabet = [ ...new Set ( [ ...dstAlphabet ] . join ( '' ) ) ] ,
280- fromBase = srcAlphabet . length ,
281- toBase = dstAlphabet . length ;
280+ fromBase = BigInt ( srcAlphabet . length ) ,
281+ toBase = BigInt ( dstAlphabet . length ) ;
282282
283283 // Optimization: Pre-compute lookup map for O(1) access
284284 var srcMap = { } ;
285285 for ( var i = 0 ; i < srcAlphabet . length ; i ++ ) {
286- srcMap [ srcAlphabet [ i ] ] = i ;
286+ srcMap [ srcAlphabet [ i ] ] = BigInt ( i ) ;
287287 }
288288
289289 return ( number ) => {
290290 if ( noDifference ) return number ;
291291
292- number = [ ...number ] ;
293-
294- var i ,
295- divide ,
296- newlen ,
297- length = number . length ,
298- result = [ ] ,
299- numberMap = new Array ( length ) ;
300-
301- for ( i = 0 ; i < length ; i ++ ) numberMap [ i ] = srcMap [ number [ i ] ] ;
302-
303- do {
304- divide = 0 ;
305- newlen = 0 ;
306- for ( i = 0 ; i < length ; i ++ ) {
307- divide = divide * fromBase + numberMap [ i ] ;
308- if ( divide >= toBase ) {
309- numberMap [ newlen ++ ] = parseInt ( divide / toBase , 10 ) ;
310- divide = divide % toBase ;
311- } else if ( newlen ) numberMap [ newlen ++ ] = 0 ;
312- }
313- length = newlen ;
314- result . push ( dstAlphabet [ divide ] ) ;
315- } while ( newlen != 0 ) ;
292+ var val = 0n ;
293+ for ( var i = 0 ; i < number . length ; i ++ ) {
294+ var char = number [ i ] ;
295+ if ( srcMap [ char ] === undefined ) continue ;
296+ val = val * fromBase + srcMap [ char ] ;
297+ }
298+
299+ if ( val === 0n ) return dstAlphabet [ 0 ] ;
300+
301+ var result = [ ] ;
302+ while ( val > 0n ) {
303+ var remainder = val % toBase ;
304+ result . push ( dstAlphabet [ Number ( remainder ) ] ) ;
305+ val = val / toBase ;
306+ }
316307
317308 return result . reverse ( ) . join ( '' ) ;
318309 } ;
0 commit comments