fasiha / mudderjs

Lexicographically-subdivide the “space” between strings, by defining an alternate non-base-ten number system using a pre-defined dictionary of symbol↔︎number mappings. Handy for ordering NoSQL keys.
The Unlicense
122 stars 9 forks source link

Port to BigInt? #6

Open fasiha opened 5 years ago

fasiha commented 5 years ago

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt

Available in Chrome/Node now. In Firefox beta. WIP in Safari per https://wingolog.org/archives/2019/05/23/bigint-shipping-in-firefox

fasiha commented 5 years ago

Basic sketch, proof of concept, showing both ascending and descending operation:

"use strict";

function bigIntToDigits(x, base) {
  let ret = [];
  while (x > 0) {
    ret.push(x % base);
    x /= base;
  }
  ret.reverse();
  return ret;
}

function bigIntSubdivide(l, r, n, base) {
  while ((r - l) / n === 0n) {
    r *= base;
    l *= base;
  }
  let delta = (r - l) / n;
  let ret = [];
  let nNumber = Number(n);
  {
    let prev = l;
    for (let i = 0; i < nNumber; i++) {
      let next = prev + delta;
      ret.push(next);
      prev = next;
    }
  }
  return ret;
}

function digits2bigint(arr, base) {
  arr = arr.map(BigInt);
  let ret = 0n;
  let pow = 1n;
  for (let i = arr.length - 1; i >= 0; --i) {
    ret += arr[i] * pow;
    pow *= base;
  }
  return ret;
}

function makeUniqueNumArr(vov, left) {
  vov.forEach((arr, i) => {
    const prev = vov[i - 1] || left;
    const hit = arr.findIndex((n, i) => n !== prev[i]);
    if (hit >= 0) { vov[i] = vov[i].slice(0, hit + 1); }
  });
  return vov;
}

function main(left, right, numStringsNumber, num2sym, shorten = true) {
  let sym2num = new Map(num2sym.map((sym, i) => [sym, i]));
  let base = BigInt(num2sym.length);

  const str2digits = s => s.split('').map(c => sym2num.get(c));
  let flipped = left > right;
  if (flipped) { [left, right] = [right, left]; }

  let maxLen = Math.max(left.length, right.length);
  let bigintarr = bigIntSubdivide(
      digits2bigint(str2digits(num2sym[1] + left + num2sym[0].repeat(maxLen - left.length)), base),
      digits2bigint(str2digits(num2sym[1] + right + num2sym[0].repeat(maxLen - right.length)), base),
      BigInt(numStringsNumber),
      base,
  );

  if (!shorten) {
    if (flipped) { bigintarr.reverse(); }
    return bigintarr.map(n => bigIntToDigits(n, base).slice(1).map(n => num2sym[n]).join(''));
  }
  let ret = makeUniqueNumArr(bigintarr.map(n => bigIntToDigits(n, base).slice(1).map(n => num2sym[n])), left.split(''))
                .map(v => v.join(''));
  if (flipped) { ret.reverse(); }
  return ret;
}

function checkAsc(v) {
  if (!v.every((s, i) => (!i) || v[i - 1] < s)) { throw new Error('invalid'); }
}
function checkDesc(v) {
  if (!v.every((s, i) => (!i) || v[i - 1] > s)) { throw new Error('invalid'); }
}
if (require.main === module) {
  let num2sym = '0123456789abcdef'.split('');
  let left = '03a';
  let right = '2';
  let numStrings = 1000;

  let mudder = require('./index');
  let hex = new mudder.SymbolTable(num2sym);

  for (let i = 0; i < 2; i++) {
    if (i > 0) { [left, right] = [right, left]; }

    let sameLength = main(left, right, numStrings, num2sym, false);
    let shortAsPossible = main(left, right, numStrings, num2sym, true);
    let gold = hex.mudder(left, right, Number(numStrings));

    console.log('\n\nBigIntSameLen\tBigIntShort\tMudder');
    console.log(gold.map((gold, i) => [sameLength[i], shortAsPossible[i], gold].join('\t')).join('\n'));

    let check = (left < right) ? checkAsc : checkDesc;
    check(sameLength);
    check(shortAsPossible);
    check(gold);
  }
}

Outputs:

BigIntSameLen   BigIntShort Mudder
03a7    03a7    03a7
03ae    03ae    03ae
03b5    03b 03b
03bc    03bc    03bd
03c3    03c 03c
03ca    03ca    03cb
03d1    03d 03d
03d8    03d8    03da
03df    03df    03e
03e6    03e 03e8
03ed    03ed    03ef
03f4    03f 03f
03fb    03fb    03fe
0402    04  04
0409    040 040c
0410    041 041
0417    0417    041b
041e    041e    042
0425    042 0429
042c    042c    043
0433    043 0438
043a    043a    043f
0441    044 044
0448    0448    044e
044f    044f    045
0456    045 045c
045d    045d    046
0464    046 046b
046b    046b    047
0472    047 0479
0479    0479    048
0480    048 0488
0487    0487    048f
048e    048e    049
0495    049 049d
049c    049c    04a
04a3    04a 04ac
04aa    04aa    04b
04b1    04b 04bb
04b8    04b8    04c
04bf    04bf    04c9
04c6    04c 04d
04cd    04cd    04d8
04d4    04d 04df
04db    04db    04e
04e2    04e 04ed
04e9    04e9    04f
04f0    04f 04fc
04f7    04f7    05
04fe    04fe    050a
0505    05  051
050c    050 0519
0513    051 052
051a    051a    0527
0521    052 052f
0528    0528    053
052f    052f    053d
0536    053 054
053d    053d    054c
0544    054 055
054b    054b    055a
0552    055 056
0559    0559    0569
0560    056 057
0567    0567    0577
056e    056e    057e
0575    057 058
057c    057c    058d
0583    058 059
058a    058a    059b
0591    059 05a
0598    0598    05aa
059f    059f    05b
05a6    05a 05b9
05ad    05ad    05c
05b4    05b 05c7
05bb    05bb    05ce
05c2    05c 05d
05c9    05c9    05dd
05d0    05d 05e
05d7    05d7    05eb
05de    05de    05f
05e5    05e 05fa
05ec    05ec    06
05f3    05f 0608
05fa    05fa    061
0601    06  0617
0608    060 061e
060f    060f    062
0616    061 062d
061d    061d    063
0624    062 063b
062b    062b    064
0632    063 064a
0639    0639    065
0640    064 0658
0647    0647    065f
064e    064e    066
0655    065 066e
065c    065c    067
0663    066 067c
066a    066a    068
0671    067 068b
0678    0678    069
067f    067f    0699
0686    068 06a
068d    068d    06a8
0694    069 06af
069b    069b    06b
06a2    06a 06be
06a9    06a9    06c
06b0    06b 06cc
06b7    06b7    06d
06be    06be    06db
06c5    06c 06e
06cc    06cc    06e9
06d3    06d 06f
06da    06da    06f8
06e1    06e 06ff
06e8    06e8    07
06ef    06ef    070e
06f6    06f 071
06fd    06fd    071c
0704    07  072
070b    070 072b
0712    071 073
0719    0719    0739
0720    072 074
0727    0727    0748
072e    072e    074f
0735    073 075
073c    073c    075d
0743    074 076
074a    074a    076c
0751    075 077
0758    0758    077a
075f    075f    078
0766    076 0789
076d    076d    079
0774    077 0797
077b    077b    079f
0782    078 07a
0789    0789    07ad
0790    079 07b
0797    0797    07bc
079e    079e    07c
07a5    07a 07ca
07ac    07ac    07d
07b3    07b 07d9
07ba    07ba    07e
07c1    07c 07e7
07c8    07c8    07ef
07cf    07cf    07f
07d6    07d 07fd
07dd    07dd    08
07e4    07e 080c
07eb    07eb    081
07f2    07f 081a
07f9    07f9    082
0800    08  0829
0807    080 083
080e    080e    0837
0815    081 083e
081c    081c    084
0823    082 084d
082a    082a    085
0831    083 085b
0838    0838    086
083f    083f    086a
0846    084 087
084d    084d    0878
0854    085 088
085b    085b    0887
0862    086 088e
0869    0869    089
0870    087 089d
0877    0877    08a
087e    087e    08ab
0885    088 08b
088c    088c    08ba
0893    089 08c
089a    089a    08c8
08a1    08a 08cf
08a8    08a8    08d
08af    08af    08de
08b6    08b 08e
08bd    08bd    08ed
08c4    08c 08f
08cb    08cb    08fb
08d2    08d 09
08d9    08d9    090a
08e0    08e 091
08e7    08e7    0918
08ee    08ee    091f
08f5    08f 092
08fc    08fc    092e
0903    09  093
090a    090 093c
0911    091 094
0918    0918    094b
091f    091f    095
0926    092 0959
092d    092d    096
0934    093 0968
093b    093b    096f
0942    094 097
0949    0949    097e
0950    095 098
0957    0957    098c
095e    095e    099
0965    096 099b
096c    096c    09a
0973    097 09a9
097a    097a    09b
0981    098 09b8
0988    0988    09bf
098f    098f    09c
0996    099 09cd
099d    099d    09d
09a4    09a 09dc
09ab    09ab    09e
09b2    09b 09ea
09b9    09b9    09f
09c0    09c 09f9
09c7    09c7    0a
09ce    09ce    0a08
09d5    09d 0a0f
09dc    09dc    0a1
09e3    09e 0a1d
09ea    09ea    0a2
09f1    09f 0a2c
09f8    09f8    0a3
09ff    09ff    0a3a
0a06    0a  0a4
0a0d    0a0 0a49
0a14    0a1 0a5
0a1b    0a1b    0a57
0a22    0a2 0a5f
0a29    0a29    0a6
0a30    0a3 0a6d
0a37    0a37    0a7
0a3e    0a3e    0a7c
0a45    0a4 0a8
0a4c    0a4c    0a8a
0a53    0a5 0a9
0a5a    0a5a    0a99
0a61    0a6 0aa
0a68    0a68    0aa7
0a6f    0a6f    0aae
0a76    0a7 0ab
0a7d    0a7d    0abd
0a84    0a8 0ac
0a8b    0a8b    0acb
0a92    0a9 0ad
0a99    0a99    0ada
0aa0    0aa 0ae
0aa7    0aa7    0ae8
0aae    0aae    0af
0ab5    0ab 0af7
0abc    0abc    0afe
0ac3    0ac 0b
0aca    0aca    0b0d
0ad1    0ad 0b1
0ad8    0ad8    0b1b
0adf    0adf    0b2
0ae6    0ae 0b2a
0aed    0aed    0b3
0af4    0af 0b38
0afb    0afb    0b4
0b02    0b  0b47
0b09    0b0 0b4e
0b10    0b1 0b5
0b17    0b17    0b5d
0b1e    0b1e    0b6
0b25    0b2 0b6b
0b2c    0b2c    0b7
0b33    0b3 0b7a
0b3a    0b3a    0b8
0b41    0b4 0b88
0b48    0b48    0b8f
0b4f    0b4f    0b9
0b56    0b5 0b9e
0b5d    0b5d    0ba
0b64    0b6 0bac
0b6b    0b6b    0bb
0b72    0b7 0bbb
0b79    0b79    0bc
0b80    0b8 0bc9
0b87    0b87    0bd
0b8e    0b8e    0bd8
0b95    0b9 0bdf
0b9c    0b9c    0be
0ba3    0ba 0bee
0baa    0baa    0bf
0bb1    0bb 0bfc
0bb8    0bb8    0c
0bbf    0bbf    0c0b
0bc6    0bc 0c1
0bcd    0bcd    0c19
0bd4    0bd 0c2
0bdb    0bdb    0c28
0be2    0be 0c2f
0be9    0be9    0c3
0bf0    0bf 0c3e
0bf7    0bf7    0c4
0bfe    0bfe    0c4c
0c05    0c  0c5
0c0c    0c0 0c5b
0c13    0c1 0c6
0c1a    0c1a    0c69
0c21    0c2 0c7
0c28    0c28    0c78
0c2f    0c2f    0c7f
0c36    0c3 0c8
0c3d    0c3d    0c8d
0c44    0c4 0c9
0c4b    0c4b    0c9c
0c52    0c5 0ca
0c59    0c59    0caa
0c60    0c6 0cb
0c67    0c67    0cb9
0c6e    0c6e    0cc
0c75    0c7 0cc7
0c7c    0c7c    0ccf
0c83    0c8 0cd
0c8a    0c8a    0cdd
0c91    0c9 0ce
0c98    0c98    0cec
0c9f    0c9f    0cf
0ca6    0ca 0cfa
0cad    0cad    0d
0cb4    0cb 0d09
0cbb    0cbb    0d1
0cc2    0cc 0d17
0cc9    0cc9    0d1f
0cd0    0cd 0d2
0cd7    0cd7    0d2d
0cde    0cde    0d3
0ce5    0ce 0d3c
0cec    0cec    0d4
0cf3    0cf 0d4a
0cfa    0cfa    0d5
0d01    0d  0d59
0d08    0d0 0d6
0d0f    0d0f    0d67
0d16    0d1 0d6e
0d1d    0d1d    0d7
0d24    0d2 0d7d
0d2b    0d2b    0d8
0d32    0d3 0d8b
0d39    0d39    0d9
0d40    0d4 0d9a
0d47    0d47    0da
0d4e    0d4e    0da8
0d55    0d5 0db
0d5c    0d5c    0db7
0d63    0d6 0dbe
0d6a    0d6a    0dc
0d71    0d7 0dcd
0d78    0d78    0dd
0d7f    0d7f    0ddb
0d86    0d8 0de
0d8d    0d8d    0dea
0d94    0d9 0df
0d9b    0d9b    0df8
0da2    0da 0dff
0da9    0da9    0e
0db0    0db 0e0e
0db7    0db7    0e1
0dbe    0dbe    0e1c
0dc5    0dc 0e2
0dcc    0dcc    0e2b
0dd3    0dd 0e3
0dda    0dda    0e3a
0de1    0de 0e4
0de8    0de8    0e48
0def    0def    0e4f
0df6    0df 0e5
0dfd    0dfd    0e5e
0e04    0e  0e6
0e0b    0e0 0e6c
0e12    0e1 0e7
0e19    0e19    0e7b
0e20    0e2 0e8
0e27    0e27    0e89
0e2e    0e2e    0e9
0e35    0e3 0e98
0e3c    0e3c    0e9f
0e43    0e4 0ea
0e4a    0e4a    0eae
0e51    0e5 0eb
0e58    0e58    0ebc
0e5f    0e5f    0ec
0e66    0e6 0ecb
0e6d    0e6d    0ed
0e74    0e7 0ed9
0e7b    0e7b    0ee
0e82    0e8 0ee8
0e89    0e89    0eef
0e90    0e9 0ef
0e97    0e97    0efd
0e9e    0e9e    0f
0ea5    0ea 0f0c
0eac    0eac    0f1
0eb3    0eb 0f1a
0eba    0eba    0f2
0ec1    0ec 0f29
0ec8    0ec8    0f3
0ecf    0ecf    0f38
0ed6    0ed 0f3f
0edd    0edd    0f4
0ee4    0ee 0f4d
0eeb    0eeb    0f5
0ef2    0ef 0f5c
0ef9    0ef9    0f6
0f00    0f  0f6a
0f07    0f0 0f7
0f0e    0f0e    0f79
0f15    0f1 0f8
0f1c    0f1c    0f87
0f23    0f2 0f8f
0f2a    0f2a    0f9
0f31    0f3 0f9d
0f38    0f38    0fa
0f3f    0f3f    0fac
0f46    0f4 0fb
0f4d    0f4d    0fba
0f54    0f5 0fc
0f5b    0f5b    0fc9
0f62    0f6 0fd
0f69    0f69    0fd7
0f70    0f7 0fde
0f77    0f77    0fe
0f7e    0f7e    0fed
0f85    0f8 0ff
0f8c    0f8c    0ffb
0f93    0f9 1
0f9a    0f9a    100a
0fa1    0fa 101
0fa8    0fa8    1018
0faf    0faf    102
0fb6    0fb 1027
0fbd    0fbd    102e
0fc4    0fc 103
0fcb    0fcb    103d
0fd2    0fd 104
0fd9    0fd9    104b
0fe0    0fe 105
0fe7    0fe7    105a
0fee    0fee    106
0ff5    0ff 1068
0ffc    0ffc    107
1003    1   1077
100a    10  107e
1011    101 108
1018    1018    108d
101f    101f    109
1026    102 109b
102d    102d    10a
1034    103 10aa
103b    103b    10b
1042    104 10b8
1049    1049    10bf
1050    105 10c
1057    1057    10ce
105e    105e    10d
1065    106 10dc
106c    106c    10e
1073    107 10eb
107a    107a    10f
1081    108 10f9
1088    1088    11
108f    108f    1108
1096    109 110f
109d    109d    111
10a4    10a 111e
10ab    10ab    112
10b2    10b 112c
10b9    10b9    113
10c0    10c 113b
10c7    10c7    114
10ce    10ce    1149
10d5    10d 115
10dc    10dc    1158
10e3    10e 115f
10ea    10ea    116
10f1    10f 116e
10f8    10f8    117
10ff    10ff    117c
1106    11  118
110d    110 118b
1114    111 119
111b    111b    1199
1122    112 11a
1129    1129    11a8
1130    113 11af
1137    1137    11b
113e    113e    11bd
1145    114 11c
114c    114c    11cc
1153    115 11d
115a    115a    11da
1161    116 11e
1168    1168    11e9
116f    116f    11f
1176    117 11f7
117d    117d    11ff
1184    118 12
118b    118b    120d
1192    119 121
1199    1199    121c
11a0    11a 122
11a7    11a7    122a
11ae    11ae    123
11b5    11b 1239
11bc    11bc    124
11c3    11c 1247
11ca    11ca    124e
11d1    11d 125
11d8    11d8    125d
11df    11df    126
11e6    11e 126c
11ed    11ed    127
11f4    11f 127a
11fb    11fb    128
1202    12  1289
1209    120 129
1210    121 1297
1217    1217    129e
121e    121e    12a
1225    122 12ad
122c    122c    12b
1233    123 12bb
123a    123a    12c
1241    124 12ca
1248    1248    12d
124f    124f    12d8
1256    125 12e
125d    125d    12e7
1264    126 12ee
126b    126b    12f
1272    127 12fd
1279    1279    13
1280    128 130b
1287    1287    131
128e    128e    131a
1295    129 132
129c    129c    1328
12a3    12a 132f
12aa    12aa    133
12b1    12b 133e
12b8    12b8    134
12bf    12bf    134c
12c6    12c 135
12cd    12cd    135b
12d4    12d 136
12db    12db    136a
12e2    12e 137
12e9    12e9    1378
12f0    12f 137f
12f7    12f7    138
12fe    12fe    138e
1305    13  139
130c    130 139c
1313    131 13a
131a    131a    13ab
1321    132 13b
1328    1328    13b9
132f    132f    13c
1336    133 13c8
133d    133d    13cf
1344    134 13d
134b    134b    13de
1352    135 13e
1359    1359    13ec
1360    136 13f
1367    1367    13fb
136e    136e    14
1375    137 1409
137c    137c    141
1383    138 1418
138a    138a    141f
1391    139 142
1398    1398    142d
139f    139f    143
13a6    13a 143c
13ad    13ad    144
13b4    13b 144a
13bb    13bb    145
13c2    13c 1459
13c9    13c9    146
13d0    13d 1467
13d7    13d7    146f
13de    13de    147
13e5    13e 147d
13ec    13ec    148
13f3    13f 148c
13fa    13fa    149
1401    14  149a
1408    140 14a
140f    140f    14a9
1416    141 14b
141d    141d    14b7
1424    142 14bf
142b    142b    14c
1432    143 14cd
1439    1439    14d
1440    144 14dc
1447    1447    14e
144e    144e    14ea
1455    145 14f
145c    145c    14f9
1463    146 15
146a    146a    1507
1471    147 150e
1478    1478    151
147f    147f    151d
1486    148 152
148d    148d    152b
1494    149 153
149b    149b    153a
14a2    14a 154
14a9    14a9    1548
14b0    14b 155
14b7    14b7    1557
14be    14be    155e
14c5    14c 156
14cc    14cc    156d
14d3    14d 157
14da    14da    157b
14e1    14e 158
14e8    14e8    158a
14ef    14ef    159
14f6    14f 1598
14fd    14fd    15a
1504    15  15a7
150b    150 15ae
1512    151 15b
1519    1519    15bd
1520    152 15c
1527    1527    15cb
152e    152e    15d
1535    153 15da
153c    153c    15e
1543    154 15e8
154a    154a    15ef
1551    155 15f
1558    1558    15fe
155f    155f    16
1566    156 160c
156d    156d    161
1574    157 161b
157b    157b    162
1582    158 1629
1589    1589    163
1590    159 1638
1597    1597    163f
159e    159e    164
15a5    15a 164e
15ac    15ac    165
15b3    15b 165c
15ba    15ba    166
15c1    15c 166b
15c8    15c8    167
15cf    15cf    1679
15d6    15d 168
15dd    15dd    1688
15e4    15e 168f
15eb    15eb    169
15f2    15f 169e
15f9    15f9    16a
1600    16  16ac
1607    160 16b
160e    160e    16bb
1615    161 16c
161c    161c    16c9
1623    162 16d
162a    162a    16d8
1631    163 16df
1638    1638    16e
163f    163f    16ed
1646    164 16f
164d    164d    16fc
1654    165 17
165b    165b    170a
1662    166 171
1669    1669    1719
1670    167 172
1677    1677    1727
167e    167e    172f
1685    168 173
168c    168c    173d
1693    169 174
169a    169a    174c
16a1    16a 175
16a8    16a8    175a
16af    16af    176
16b6    16b 1769
16bd    16bd    177
16c4    16c 1777
16cb    16cb    177e
16d2    16d 178
16d9    16d9    178d
16e0    16e 179
16e7    16e7    179c
16ee    16ee    17a
16f5    16f 17aa
16fc    16fc    17b
1703    17  17b9
170a    170 17c
1711    171 17c7
1718    1718    17ce
171f    171f    17d
1726    172 17dd
172d    172d    17e
1734    173 17eb
173b    173b    17f
1742    174 17fa
1749    1749    18
1750    175 1808
1757    1757    181
175e    175e    1817
1765    176 181e
176c    176c    182
1773    177 182d
177a    177a    183
1781    178 183b
1788    1788    184
178f    178f    184a
1796    179 185
179d    179d    1858
17a4    17a 185f
17ab    17ab    186
17b2    17b 186e
17b9    17b9    187
17c0    17c 187c
17c7    17c7    188
17ce    17ce    188b
17d5    17d 189
17dc    17dc    1899
17e3    17e 18a
17ea    17ea    18a8
17f1    17f 18af
17f8    17f8    18b
17ff    17ff    18be
1806    18  18c
180d    180 18cc
1814    181 18d
181b    181b    18db
1822    182 18e
1829    1829    18e9
1830    183 18f
1837    1837    18f8
183e    183e    18ff
1845    184 19
184c    184c    190e
1853    185 191
185a    185a    191c
1861    186 192
1868    1868    192b
186f    186f    193
1876    187 1939
187d    187d    194
1884    188 1948
188b    188b    194f
1892    189 195
1899    1899    195d
18a0    18a 196
18a7    18a7    196c
18ae    18ae    197
18b5    18b 197a
18bc    18bc    198
18c3    18c 1989
18ca    18ca    199
18d1    18d 1997
18d8    18d8    199f
18df    18df    19a
18e6    18e 19ad
18ed    18ed    19b
18f4    18f 19bc
18fb    18fb    19c
1902    19  19ca
1909    190 19d
1910    191 19d9
1917    1917    19e
191e    191e    19e7
1925    192 19ef
192c    192c    19f
1933    193 19fd
193a    193a    1a
1941    194 1a0c
1948    1948    1a1
194f    194f    1a1a
1956    195 1a2
195d    195d    1a29
1964    196 1a3
196b    196b    1a37
1972    197 1a3e
1979    1979    1a4
1980    198 1a4d
1987    1987    1a5
198e    198e    1a5b
1995    199 1a6
199c    199c    1a6a
19a3    19a 1a7
19aa    19aa    1a78
19b1    19b 1a8
19b8    19b8    1a87
19bf    19bf    1a8e
19c6    19c 1a9
19cd    19cd    1a9d
19d4    19d 1aa
19db    19db    1aab
19e2    19e 1ab
19e9    19e9    1aba
19f0    19f 1ac
19f7    19f7    1ac8
19fe    19fe    1ad
1a05    1a  1ad7
1a0c    1a0 1ade
1a13    1a1 1ae
1a1a    1a1a    1aed
1a21    1a2 1af
1a28    1a28    1afb
1a2f    1a2f    1b
1a36    1a3 1b0a
1a3d    1a3d    1b1
1a44    1a4 1b18
1a4b    1a4b    1b1f
1a52    1a5 1b2
1a59    1a59    1b2e
1a60    1a6 1b3
1a67    1a67    1b3c
1a6e    1a6e    1b4
1a75    1a7 1b4b
1a7c    1a7c    1b5
1a83    1a8 1b59
1a8a    1a8a    1b6
1a91    1a9 1b68
1a98    1a98    1b6f
1a9f    1a9f    1b7
1aa6    1aa 1b7e
1aad    1aad    1b8
1ab4    1ab 1b8c
1abb    1abb    1b9
1ac2    1ac 1b9b
1ac9    1ac9    1ba
1ad0    1ad 1ba9
1ad7    1ad7    1bb
1ade    1ade    1bb8
1ae5    1ae 1bbf
1aec    1aec    1bc
1af3    1af 1bce
1afa    1afa    1bd
1b01    1b  1bdc
1b08    1b0 1be
1b0f    1b0f    1beb
1b16    1b1 1bf
1b1d    1b1d    1bf9
1b24    1b2 1c
1b2b    1b2b    1c08
1b32    1b3 1c0f
1b39    1b39    1c1
1b40    1b4 1c1d
1b47    1b47    1c2
1b4e    1b4e    1c2c
1b55    1b5 1c3
1b5c    1b5c    1c3a
1b63    1b6 1c4
1b6a    1b6a    1c49
1b71    1b7 1c5
1b78    1b78    1c57
1b7f    1b7f    1c5f
1b86    1b8 1c6
1b8d    1b8d    1c6d
1b94    1b9 1c7
1b9b    1b9b    1c7c
1ba2    1ba 1c8
1ba9    1ba9    1c8a
1bb0    1bb 1c9
1bb7    1bb7    1c99
1bbe    1bbe    1ca
1bc5    1bc 1ca7
1bcc    1bcc    1cae
1bd3    1bd 1cb
1bda    1bda    1cbd
1be1    1be 1cc
1be8    1be8    1ccb
1bef    1bef    1cd
1bf6    1bf 1cda
1bfd    1bfd    1ce
1c04    1c  1ce9
1c0b    1c0 1cf
1c12    1c1 1cf7
1c19    1c19    1cfe
1c20    1c2 1d
1c27    1c27    1d0d
1c2e    1c2e    1d1
1c35    1c3 1d1b
1c3c    1c3c    1d2
1c43    1c4 1d2a
1c4a    1c4a    1d3
1c51    1c5 1d38
1c58    1c58    1d4
1c5f    1c5f    1d47
1c66    1c6 1d4e
1c6d    1c6d    1d5
1c74    1c7 1d5d
1c7b    1c7b    1d6
1c82    1c8 1d6b
1c89    1c89    1d7
1c90    1c9 1d7a
1c97    1c97    1d8
1c9e    1c9e    1d88
1ca5    1ca 1d8f
1cac    1cac    1d9
1cb3    1cb 1d9e
1cba    1cba    1da
1cc1    1cc 1dac
1cc8    1cc8    1db
1ccf    1ccf    1dbb
1cd6    1cd 1dc
1cdd    1cdd    1dc9
1ce4    1ce 1dd
1ceb    1ceb    1dd8
1cf2    1cf 1ddf
1cf9    1cf9    1de
1d00    1d  1dee
1d07    1d0 1df
1d0e    1d0e    1dfc
1d15    1d1 1e
1d1c    1d1c    1e0b
1d23    1d2 1e1
1d2a    1d2a    1e19
1d31    1d3 1e2
1d38    1d38    1e28
1d3f    1d3f    1e2f
1d46    1d4 1e3
1d4d    1d4d    1e3e
1d54    1d5 1e4
1d5b    1d5b    1e4c
1d62    1d6 1e5
1d69    1d69    1e5b
1d70    1d7 1e6
1d77    1d77    1e69
1d7e    1d7e    1e7
1d85    1d8 1e78
1d8c    1d8c    1e7f
1d93    1d9 1e8
1d9a    1d9a    1e8d
1da1    1da 1e9
1da8    1da8    1e9c
1daf    1daf    1ea
1db6    1db 1eaa
1dbd    1dbd    1eb
1dc4    1dc 1eb9
1dcb    1dcb    1ec
1dd2    1dd 1ec7
1dd9    1dd9    1ecf
1de0    1de 1ed
1de7    1de7    1edd
1dee    1dee    1ee
1df5    1df 1eec
1dfc    1dfc    1ef
1e03    1e  1efa
1e0a    1e0 1f
1e11    1e1 1f09
1e18    1e18    1f1
1e1f    1e1f    1f17
1e26    1e2 1f1f
1e2d    1e2d    1f2
1e34    1e3 1f2d
1e3b    1e3b    1f3
1e42    1e4 1f3c
1e49    1e49    1f4
1e50    1e5 1f4a
1e57    1e57    1f5
1e5e    1e5e    1f59
1e65    1e6 1f6
1e6c    1e6c    1f67
1e73    1e7 1f6e
1e7a    1e7a    1f7
1e81    1e8 1f7d
1e88    1e88    1f8
1e8f    1e8f    1f8b
1e96    1e9 1f9
1e9d    1e9d    1f9a
1ea4    1ea 1fa
1eab    1eab    1fa8
1eb2    1eb 1fb
1eb9    1eb9    1fb7
1ec0    1ec 1fbe
1ec7    1ec7    1fc
1ece    1ece    1fcd
1ed5    1ed 1fd
1edc    1edc    1fdb
1ee3    1ee 1fe
1eea    1eea    1fea
1ef1    1ef 1ff
1ef8    1ef8    1ff8

BigIntSameLen   BigIntShort Mudder
1ef8    1ef8    1ff8
1ef1    1ef 1ff
1eea    1eea    1fea
1ee3    1ee 1fe
1edc    1edc    1fdb
1ed5    1ed 1fd
1ece    1ece    1fcd
1ec7    1ec7    1fc
1ec0    1ec 1fbe
1eb9    1eb9    1fb7
1eb2    1eb 1fb
1eab    1eab    1fa8
1ea4    1ea 1fa
1e9d    1e9d    1f9a
1e96    1e9 1f9
1e8f    1e8f    1f8b
1e88    1e88    1f8
1e81    1e8 1f7d
1e7a    1e7a    1f7
1e73    1e7 1f6e
1e6c    1e6c    1f67
1e65    1e6 1f6
1e5e    1e5e    1f59
1e57    1e57    1f5
1e50    1e5 1f4a
1e49    1e49    1f4
1e42    1e4 1f3c
1e3b    1e3b    1f3
1e34    1e3 1f2d
1e2d    1e2d    1f2
1e26    1e2 1f1f
1e1f    1e1f    1f17
1e18    1e18    1f1
1e11    1e1 1f09
1e0a    1e0 1f
1e03    1e  1efa
1dfc    1dfc    1ef
1df5    1df 1eec
1dee    1dee    1ee
1de7    1de7    1edd
1de0    1de 1ed
1dd9    1dd9    1ecf
1dd2    1dd 1ec7
1dcb    1dcb    1ec
1dc4    1dc 1eb9
1dbd    1dbd    1eb
1db6    1db 1eaa
1daf    1daf    1ea
1da8    1da8    1e9c
1da1    1da 1e9
1d9a    1d9a    1e8d
1d93    1d9 1e8
1d8c    1d8c    1e7f
1d85    1d8 1e78
1d7e    1d7e    1e7
1d77    1d77    1e69
1d70    1d7 1e6
1d69    1d69    1e5b
1d62    1d6 1e5
1d5b    1d5b    1e4c
1d54    1d5 1e4
1d4d    1d4d    1e3e
1d46    1d4 1e3
1d3f    1d3f    1e2f
1d38    1d38    1e28
1d31    1d3 1e2
1d2a    1d2a    1e19
1d23    1d2 1e1
1d1c    1d1c    1e0b
1d15    1d1 1e
1d0e    1d0e    1dfc
1d07    1d0 1df
1d00    1d  1dee
1cf9    1cf9    1de
1cf2    1cf 1ddf
1ceb    1ceb    1dd8
1ce4    1ce 1dd
1cdd    1cdd    1dc9
1cd6    1cd 1dc
1ccf    1ccf    1dbb
1cc8    1cc8    1db
1cc1    1cc 1dac
1cba    1cba    1da
1cb3    1cb 1d9e
1cac    1cac    1d9
1ca5    1ca 1d8f
1c9e    1c9e    1d88
1c97    1c97    1d8
1c90    1c9 1d7a
1c89    1c89    1d7
1c82    1c8 1d6b
1c7b    1c7b    1d6
1c74    1c7 1d5d
1c6d    1c6d    1d5
1c66    1c6 1d4e
1c5f    1c5f    1d47
1c58    1c58    1d4
1c51    1c5 1d38
1c4a    1c4a    1d3
1c43    1c4 1d2a
1c3c    1c3c    1d2
1c35    1c3 1d1b
1c2e    1c2e    1d1
1c27    1c27    1d0d
1c20    1c2 1d
1c19    1c19    1cfe
1c12    1c1 1cf7
1c0b    1c0 1cf
1c04    1c  1ce9
1bfd    1bfd    1ce
1bf6    1bf 1cda
1bef    1bef    1cd
1be8    1be8    1ccb
1be1    1be 1cc
1bda    1bda    1cbd
1bd3    1bd 1cb
1bcc    1bcc    1cae
1bc5    1bc 1ca7
1bbe    1bbe    1ca
1bb7    1bb7    1c99
1bb0    1bb 1c9
1ba9    1ba9    1c8a
1ba2    1ba 1c8
1b9b    1b9b    1c7c
1b94    1b9 1c7
1b8d    1b8d    1c6d
1b86    1b8 1c6
1b7f    1b7f    1c5f
1b78    1b78    1c57
1b71    1b7 1c5
1b6a    1b6a    1c49
1b63    1b6 1c4
1b5c    1b5c    1c3a
1b55    1b5 1c3
1b4e    1b4e    1c2c
1b47    1b47    1c2
1b40    1b4 1c1d
1b39    1b39    1c1
1b32    1b3 1c0f
1b2b    1b2b    1c08
1b24    1b2 1c
1b1d    1b1d    1bf9
1b16    1b1 1bf
1b0f    1b0f    1beb
1b08    1b0 1be
1b01    1b  1bdc
1afa    1afa    1bd
1af3    1af 1bce
1aec    1aec    1bc
1ae5    1ae 1bbf
1ade    1ade    1bb8
1ad7    1ad7    1bb
1ad0    1ad 1ba9
1ac9    1ac9    1ba
1ac2    1ac 1b9b
1abb    1abb    1b9
1ab4    1ab 1b8c
1aad    1aad    1b8
1aa6    1aa 1b7e
1a9f    1a9f    1b7
1a98    1a98    1b6f
1a91    1a9 1b68
1a8a    1a8a    1b6
1a83    1a8 1b59
1a7c    1a7c    1b5
1a75    1a7 1b4b
1a6e    1a6e    1b4
1a67    1a67    1b3c
1a60    1a6 1b3
1a59    1a59    1b2e
1a52    1a5 1b2
1a4b    1a4b    1b1f
1a44    1a4 1b18
1a3d    1a3d    1b1
1a36    1a3 1b0a
1a2f    1a2f    1b
1a28    1a28    1afb
1a21    1a2 1af
1a1a    1a1a    1aed
1a13    1a1 1ae
1a0c    1a0 1ade
1a05    1a  1ad7
19fe    19fe    1ad
19f7    19f7    1ac8
19f0    19f 1ac
19e9    19e9    1aba
19e2    19e 1ab
19db    19db    1aab
19d4    19d 1aa
19cd    19cd    1a9d
19c6    19c 1a9
19bf    19bf    1a8e
19b8    19b8    1a87
19b1    19b 1a8
19aa    19aa    1a78
19a3    19a 1a7
199c    199c    1a6a
1995    199 1a6
198e    198e    1a5b
1987    1987    1a5
1980    198 1a4d
1979    1979    1a4
1972    197 1a3e
196b    196b    1a37
1964    196 1a3
195d    195d    1a29
1956    195 1a2
194f    194f    1a1a
1948    1948    1a1
1941    194 1a0c
193a    193a    1a
1933    193 19fd
192c    192c    19f
1925    192 19ef
191e    191e    19e7
1917    1917    19e
1910    191 19d9
1909    190 19d
1902    19  19ca
18fb    18fb    19c
18f4    18f 19bc
18ed    18ed    19b
18e6    18e 19ad
18df    18df    19a
18d8    18d8    199f
18d1    18d 1997
18ca    18ca    199
18c3    18c 1989
18bc    18bc    198
18b5    18b 197a
18ae    18ae    197
18a7    18a7    196c
18a0    18a 196
1899    1899    195d
1892    189 195
188b    188b    194f
1884    188 1948
187d    187d    194
1876    187 1939
186f    186f    193
1868    1868    192b
1861    186 192
185a    185a    191c
1853    185 191
184c    184c    190e
1845    184 19
183e    183e    18ff
1837    1837    18f8
1830    183 18f
1829    1829    18e9
1822    182 18e
181b    181b    18db
1814    181 18d
180d    180 18cc
1806    18  18c
17ff    17ff    18be
17f8    17f8    18b
17f1    17f 18af
17ea    17ea    18a8
17e3    17e 18a
17dc    17dc    1899
17d5    17d 189
17ce    17ce    188b
17c7    17c7    188
17c0    17c 187c
17b9    17b9    187
17b2    17b 186e
17ab    17ab    186
17a4    17a 185f
179d    179d    1858
1796    179 185
178f    178f    184a
1788    1788    184
1781    178 183b
177a    177a    183
1773    177 182d
176c    176c    182
1765    176 181e
175e    175e    1817
1757    1757    181
1750    175 1808
1749    1749    18
1742    174 17fa
173b    173b    17f
1734    173 17eb
172d    172d    17e
1726    172 17dd
171f    171f    17d
1718    1718    17ce
1711    171 17c7
170a    170 17c
1703    17  17b9
16fc    16fc    17b
16f5    16f 17aa
16ee    16ee    17a
16e7    16e7    179c
16e0    16e 179
16d9    16d9    178d
16d2    16d 178
16cb    16cb    177e
16c4    16c 1777
16bd    16bd    177
16b6    16b 1769
16af    16af    176
16a8    16a8    175a
16a1    16a 175
169a    169a    174c
1693    169 174
168c    168c    173d
1685    168 173
167e    167e    172f
1677    1677    1727
1670    167 172
1669    1669    1719
1662    166 171
165b    165b    170a
1654    165 17
164d    164d    16fc
1646    164 16f
163f    163f    16ed
1638    1638    16e
1631    163 16df
162a    162a    16d8
1623    162 16d
161c    161c    16c9
1615    161 16c
160e    160e    16bb
1607    160 16b
1600    16  16ac
15f9    15f9    16a
15f2    15f 169e
15eb    15eb    169
15e4    15e 168f
15dd    15dd    1688
15d6    15d 168
15cf    15cf    1679
15c8    15c8    167
15c1    15c 166b
15ba    15ba    166
15b3    15b 165c
15ac    15ac    165
15a5    15a 164e
159e    159e    164
1597    1597    163f
1590    159 1638
1589    1589    163
1582    158 1629
157b    157b    162
1574    157 161b
156d    156d    161
1566    156 160c
155f    155f    16
1558    1558    15fe
1551    155 15f
154a    154a    15ef
1543    154 15e8
153c    153c    15e
1535    153 15da
152e    152e    15d
1527    1527    15cb
1520    152 15c
1519    1519    15bd
1512    151 15b
150b    150 15ae
1504    15  15a7
14fd    14fd    15a
14f6    14f 1598
14ef    14ef    159
14e8    14e8    158a
14e1    14e 158
14da    14da    157b
14d3    14d 157
14cc    14cc    156d
14c5    14c 156
14be    14be    155e
14b7    14b7    1557
14b0    14b 155
14a9    14a9    1548
14a2    14a 154
149b    149b    153a
1494    149 153
148d    148d    152b
1486    148 152
147f    147f    151d
1478    1478    151
1471    147 150e
146a    146a    1507
1463    146 15
145c    145c    14f9
1455    145 14f
144e    144e    14ea
1447    1447    14e
1440    144 14dc
1439    1439    14d
1432    143 14cd
142b    142b    14c
1424    142 14bf
141d    141d    14b7
1416    141 14b
140f    140f    14a9
1408    140 14a
1401    14  149a
13fa    13fa    149
13f3    13f 148c
13ec    13ec    148
13e5    13e 147d
13de    13de    147
13d7    13d7    146f
13d0    13d 1467
13c9    13c9    146
13c2    13c 1459
13bb    13bb    145
13b4    13b 144a
13ad    13ad    144
13a6    13a 143c
139f    139f    143
1398    1398    142d
1391    139 142
138a    138a    141f
1383    138 1418
137c    137c    141
1375    137 1409
136e    136e    14
1367    1367    13fb
1360    136 13f
1359    1359    13ec
1352    135 13e
134b    134b    13de
1344    134 13d
133d    133d    13cf
1336    133 13c8
132f    132f    13c
1328    1328    13b9
1321    132 13b
131a    131a    13ab
1313    131 13a
130c    130 139c
1305    13  139
12fe    12fe    138e
12f7    12f7    138
12f0    12f 137f
12e9    12e9    1378
12e2    12e 137
12db    12db    136a
12d4    12d 136
12cd    12cd    135b
12c6    12c 135
12bf    12bf    134c
12b8    12b8    134
12b1    12b 133e
12aa    12aa    133
12a3    12a 132f
129c    129c    1328
1295    129 132
128e    128e    131a
1287    1287    131
1280    128 130b
1279    1279    13
1272    127 12fd
126b    126b    12f
1264    126 12ee
125d    125d    12e7
1256    125 12e
124f    124f    12d8
1248    1248    12d
1241    124 12ca
123a    123a    12c
1233    123 12bb
122c    122c    12b
1225    122 12ad
121e    121e    12a
1217    1217    129e
1210    121 1297
1209    120 129
1202    12  1289
11fb    11fb    128
11f4    11f 127a
11ed    11ed    127
11e6    11e 126c
11df    11df    126
11d8    11d8    125d
11d1    11d 125
11ca    11ca    124e
11c3    11c 1247
11bc    11bc    124
11b5    11b 1239
11ae    11ae    123
11a7    11a7    122a
11a0    11a 122
1199    1199    121c
1192    119 121
118b    118b    120d
1184    118 12
117d    117d    11ff
1176    117 11f7
116f    116f    11f
1168    1168    11e9
1161    116 11e
115a    115a    11da
1153    115 11d
114c    114c    11cc
1145    114 11c
113e    113e    11bd
1137    1137    11b
1130    113 11af
1129    1129    11a8
1122    112 11a
111b    111b    1199
1114    111 119
110d    110 118b
1106    11  118
10ff    10ff    117c
10f8    10f8    117
10f1    10f 116e
10ea    10ea    116
10e3    10e 115f
10dc    10dc    1158
10d5    10d 115
10ce    10ce    1149
10c7    10c7    114
10c0    10c 113b
10b9    10b9    113
10b2    10b 112c
10ab    10ab    112
10a4    10a 111e
109d    109d    111
1096    109 110f
108f    108f    1108
1088    1088    11
1081    108 10f9
107a    107a    10f
1073    107 10eb
106c    106c    10e
1065    106 10dc
105e    105e    10d
1057    1057    10ce
1050    105 10c
1049    1049    10bf
1042    104 10b8
103b    103b    10b
1034    103 10aa
102d    102d    10a
1026    102 109b
101f    101f    109
1018    1018    108d
1011    101 108
100a    10  107e
1003    1   1077
0ffc    0ffc    107
0ff5    0ff 1068
0fee    0fee    106
0fe7    0fe7    105a
0fe0    0fe 105
0fd9    0fd9    104b
0fd2    0fd 104
0fcb    0fcb    103d
0fc4    0fc 103
0fbd    0fbd    102e
0fb6    0fb 1027
0faf    0faf    102
0fa8    0fa8    1018
0fa1    0fa 101
0f9a    0f9a    100a
0f93    0f9 1
0f8c    0f8c    0ffb
0f85    0f8 0ff
0f7e    0f7e    0fed
0f77    0f77    0fe
0f70    0f7 0fde
0f69    0f69    0fd7
0f62    0f6 0fd
0f5b    0f5b    0fc9
0f54    0f5 0fc
0f4d    0f4d    0fba
0f46    0f4 0fb
0f3f    0f3f    0fac
0f38    0f38    0fa
0f31    0f3 0f9d
0f2a    0f2a    0f9
0f23    0f2 0f8f
0f1c    0f1c    0f87
0f15    0f1 0f8
0f0e    0f0e    0f79
0f07    0f0 0f7
0f00    0f  0f6a
0ef9    0ef9    0f6
0ef2    0ef 0f5c
0eeb    0eeb    0f5
0ee4    0ee 0f4d
0edd    0edd    0f4
0ed6    0ed 0f3f
0ecf    0ecf    0f38
0ec8    0ec8    0f3
0ec1    0ec 0f29
0eba    0eba    0f2
0eb3    0eb 0f1a
0eac    0eac    0f1
0ea5    0ea 0f0c
0e9e    0e9e    0f
0e97    0e97    0efd
0e90    0e9 0ef
0e89    0e89    0eef
0e82    0e8 0ee8
0e7b    0e7b    0ee
0e74    0e7 0ed9
0e6d    0e6d    0ed
0e66    0e6 0ecb
0e5f    0e5f    0ec
0e58    0e58    0ebc
0e51    0e5 0eb
0e4a    0e4a    0eae
0e43    0e4 0ea
0e3c    0e3c    0e9f
0e35    0e3 0e98
0e2e    0e2e    0e9
0e27    0e27    0e89
0e20    0e2 0e8
0e19    0e19    0e7b
0e12    0e1 0e7
0e0b    0e0 0e6c
0e04    0e  0e6
0dfd    0dfd    0e5e
0df6    0df 0e5
0def    0def    0e4f
0de8    0de8    0e48
0de1    0de 0e4
0dda    0dda    0e3a
0dd3    0dd 0e3
0dcc    0dcc    0e2b
0dc5    0dc 0e2
0dbe    0dbe    0e1c
0db7    0db7    0e1
0db0    0db 0e0e
0da9    0da9    0e
0da2    0da 0dff
0d9b    0d9b    0df8
0d94    0d9 0df
0d8d    0d8d    0dea
0d86    0d8 0de
0d7f    0d7f    0ddb
0d78    0d78    0dd
0d71    0d7 0dcd
0d6a    0d6a    0dc
0d63    0d6 0dbe
0d5c    0d5c    0db7
0d55    0d5 0db
0d4e    0d4e    0da8
0d47    0d47    0da
0d40    0d4 0d9a
0d39    0d39    0d9
0d32    0d3 0d8b
0d2b    0d2b    0d8
0d24    0d2 0d7d
0d1d    0d1d    0d7
0d16    0d1 0d6e
0d0f    0d0f    0d67
0d08    0d0 0d6
0d01    0d  0d59
0cfa    0cfa    0d5
0cf3    0cf 0d4a
0cec    0cec    0d4
0ce5    0ce 0d3c
0cde    0cde    0d3
0cd7    0cd7    0d2d
0cd0    0cd 0d2
0cc9    0cc9    0d1f
0cc2    0cc 0d17
0cbb    0cbb    0d1
0cb4    0cb 0d09
0cad    0cad    0d
0ca6    0ca 0cfa
0c9f    0c9f    0cf
0c98    0c98    0cec
0c91    0c9 0ce
0c8a    0c8a    0cdd
0c83    0c8 0cd
0c7c    0c7c    0ccf
0c75    0c7 0cc7
0c6e    0c6e    0cc
0c67    0c67    0cb9
0c60    0c6 0cb
0c59    0c59    0caa
0c52    0c5 0ca
0c4b    0c4b    0c9c
0c44    0c4 0c9
0c3d    0c3d    0c8d
0c36    0c3 0c8
0c2f    0c2f    0c7f
0c28    0c28    0c78
0c21    0c2 0c7
0c1a    0c1a    0c69
0c13    0c1 0c6
0c0c    0c0 0c5b
0c05    0c  0c5
0bfe    0bfe    0c4c
0bf7    0bf7    0c4
0bf0    0bf 0c3e
0be9    0be9    0c3
0be2    0be 0c2f
0bdb    0bdb    0c28
0bd4    0bd 0c2
0bcd    0bcd    0c19
0bc6    0bc 0c1
0bbf    0bbf    0c0b
0bb8    0bb8    0c
0bb1    0bb 0bfc
0baa    0baa    0bf
0ba3    0ba 0bee
0b9c    0b9c    0be
0b95    0b9 0bdf
0b8e    0b8e    0bd8
0b87    0b87    0bd
0b80    0b8 0bc9
0b79    0b79    0bc
0b72    0b7 0bbb
0b6b    0b6b    0bb
0b64    0b6 0bac
0b5d    0b5d    0ba
0b56    0b5 0b9e
0b4f    0b4f    0b9
0b48    0b48    0b8f
0b41    0b4 0b88
0b3a    0b3a    0b8
0b33    0b3 0b7a
0b2c    0b2c    0b7
0b25    0b2 0b6b
0b1e    0b1e    0b6
0b17    0b17    0b5d
0b10    0b1 0b5
0b09    0b0 0b4e
0b02    0b  0b47
0afb    0afb    0b4
0af4    0af 0b38
0aed    0aed    0b3
0ae6    0ae 0b2a
0adf    0adf    0b2
0ad8    0ad8    0b1b
0ad1    0ad 0b1
0aca    0aca    0b0d
0ac3    0ac 0b
0abc    0abc    0afe
0ab5    0ab 0af7
0aae    0aae    0af
0aa7    0aa7    0ae8
0aa0    0aa 0ae
0a99    0a99    0ada
0a92    0a9 0ad
0a8b    0a8b    0acb
0a84    0a8 0ac
0a7d    0a7d    0abd
0a76    0a7 0ab
0a6f    0a6f    0aae
0a68    0a68    0aa7
0a61    0a6 0aa
0a5a    0a5a    0a99
0a53    0a5 0a9
0a4c    0a4c    0a8a
0a45    0a4 0a8
0a3e    0a3e    0a7c
0a37    0a37    0a7
0a30    0a3 0a6d
0a29    0a29    0a6
0a22    0a2 0a5f
0a1b    0a1b    0a57
0a14    0a1 0a5
0a0d    0a0 0a49
0a06    0a  0a4
09ff    09ff    0a3a
09f8    09f8    0a3
09f1    09f 0a2c
09ea    09ea    0a2
09e3    09e 0a1d
09dc    09dc    0a1
09d5    09d 0a0f
09ce    09ce    0a08
09c7    09c7    0a
09c0    09c 09f9
09b9    09b9    09f
09b2    09b 09ea
09ab    09ab    09e
09a4    09a 09dc
099d    099d    09d
0996    099 09cd
098f    098f    09c
0988    0988    09bf
0981    098 09b8
097a    097a    09b
0973    097 09a9
096c    096c    09a
0965    096 099b
095e    095e    099
0957    0957    098c
0950    095 098
0949    0949    097e
0942    094 097
093b    093b    096f
0934    093 0968
092d    092d    096
0926    092 0959
091f    091f    095
0918    0918    094b
0911    091 094
090a    090 093c
0903    09  093
08fc    08fc    092e
08f5    08f 092
08ee    08ee    091f
08e7    08e7    0918
08e0    08e 091
08d9    08d9    090a
08d2    08d 09
08cb    08cb    08fb
08c4    08c 08f
08bd    08bd    08ed
08b6    08b 08e
08af    08af    08de
08a8    08a8    08d
08a1    08a 08cf
089a    089a    08c8
0893    089 08c
088c    088c    08ba
0885    088 08b
087e    087e    08ab
0877    0877    08a
0870    087 089d
0869    0869    089
0862    086 088e
085b    085b    0887
0854    085 088
084d    084d    0878
0846    084 087
083f    083f    086a
0838    0838    086
0831    083 085b
082a    082a    085
0823    082 084d
081c    081c    084
0815    081 083e
080e    080e    0837
0807    080 083
0800    08  0829
07f9    07f9    082
07f2    07f 081a
07eb    07eb    081
07e4    07e 080c
07dd    07dd    08
07d6    07d 07fd
07cf    07cf    07f
07c8    07c8    07ef
07c1    07c 07e7
07ba    07ba    07e
07b3    07b 07d9
07ac    07ac    07d
07a5    07a 07ca
079e    079e    07c
0797    0797    07bc
0790    079 07b
0789    0789    07ad
0782    078 07a
077b    077b    079f
0774    077 0797
076d    076d    079
0766    076 0789
075f    075f    078
0758    0758    077a
0751    075 077
074a    074a    076c
0743    074 076
073c    073c    075d
0735    073 075
072e    072e    074f
0727    0727    0748
0720    072 074
0719    0719    0739
0712    071 073
070b    070 072b
0704    07  072
06fd    06fd    071c
06f6    06f 071
06ef    06ef    070e
06e8    06e8    07
06e1    06e 06ff
06da    06da    06f8
06d3    06d 06f
06cc    06cc    06e9
06c5    06c 06e
06be    06be    06db
06b7    06b7    06d
06b0    06b 06cc
06a9    06a9    06c
06a2    06a 06be
069b    069b    06b
0694    069 06af
068d    068d    06a8
0686    068 06a
067f    067f    0699
0678    0678    069
0671    067 068b
066a    066a    068
0663    066 067c
065c    065c    067
0655    065 066e
064e    064e    066
0647    0647    065f
0640    064 0658
0639    0639    065
0632    063 064a
062b    062b    064
0624    062 063b
061d    061d    063
0616    061 062d
060f    060f    062
0608    060 061e
0601    06  0617
05fa    05fa    061
05f3    05f 0608
05ec    05ec    06
05e5    05e 05fa
05de    05de    05f
05d7    05d7    05eb
05d0    05d 05e
05c9    05c9    05dd
05c2    05c 05d
05bb    05bb    05ce
05b4    05b 05c7
05ad    05ad    05c
05a6    05a 05b9
059f    059f    05b
0598    0598    05aa
0591    059 05a
058a    058a    059b
0583    058 059
057c    057c    058d
0575    057 058
056e    056e    057e
0567    0567    0577
0560    056 057
0559    0559    0569
0552    055 056
054b    054b    055a
0544    054 055
053d    053d    054c
0536    053 054
052f    052f    053d
0528    0528    053
0521    052 052f
051a    051a    0527
0513    051 052
050c    050 0519
0505    05  051
04fe    04fe    050a
04f7    04f7    05
04f0    04f 04fc
04e9    04e9    04f
04e2    04e 04ed
04db    04db    04e
04d4    04d 04df
04cd    04cd    04d8
04c6    04c 04d
04bf    04bf    04c9
04b8    04b8    04c
04b1    04b 04bb
04aa    04aa    04b
04a3    04a 04ac
049c    049c    04a
0495    049 049d
048e    048e    049
0487    0487    048f
0480    048 0488
0479    0479    048
0472    047 0479
046b    046b    047
0464    046 046b
045d    045d    046
0456    045 045c
044f    044f    045
0448    0448    044e
0441    044 044
043a    043a    043f
0433    043 0438
042c    042c    043
0425    042 0429
041e    041e    042
0417    0417    041b
0410    041 041
0409    040 040c
0402    04  04
03fb    03fb    03fe
03f4    03f 03f
03ed    03ed    03ef
03e6    03e 03e8
03df    03df    03e
03d8    03d8    03da
03d1    03d 03d
03ca    03ca    03cb
03c3    03c 03c
03bc    03bc    03bd
03b5    03b 03b
03ae    03ae    03ae
03a7    03a7    03a7
fasiha commented 5 years ago

Using the above proof-of-concept code, generating 20'000 strings between '03a' and '2' in hexadecimal symbol table:

Certainly we should offer this for BigInt-enabled runtimes, with the fallback to the existing manual big-int-like implementation available.

dekelpilli commented 1 year ago

I know this is an old issue, but just a heads up - the above implementation can be buggy, especially around lower values of n:

>  main("03a", "2", 1, "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(''))
[ '2' ] // bug - array contains value of right

>  main("03a", "2", 2, "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(''))
[ '1', '2' ] // bug - array contains value of right

>  main("03a", "2", 3, "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(''))
[ '0h', '1', '1z' ] //fine

This can be fixed by updating bigintSubdivide:

function bigIntSubdivide(l, r, n, base) {
  let divisor = n + 1n; //avoids situation where (delta * n) + l == r
  while ((r - l) / divisor === 0n) {
    r *= base;
    l *= base;
  }
  let delta = (r - l) / divisor;
  let ret = [];
  let nNumber = Number(n);
  {
    let prev = l;
    for (let i = 0; i < nNumber; i++) {
      let next = prev + delta;
      ret.push(next);
      prev = next;
    }
  }
  return ret;
}

New outputs:

> main("03a", "2", 1, "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(''))
[ '1' ]
> main("03a", "2", 2, "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(''))
[ '0h', '1' ]
> main("03a", "2", 3, "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(''))
[ '0X', '1', '1V' ]