39 lines
1.2 KiB
JavaScript
39 lines
1.2 KiB
JavaScript
/* CONSTANTS */
|
|
const ALPHABET = 'abcdefghijklmnopqrstuvwxyz';
|
|
/* HELPERS */
|
|
const int2alpha = (int) => {
|
|
let alpha = '';
|
|
while (int > 0) {
|
|
const reminder = (int - 1) % 26;
|
|
alpha = ALPHABET[reminder] + alpha;
|
|
int = Math.floor((int - 1) / 26);
|
|
}
|
|
return alpha;
|
|
};
|
|
const alpha2int = (str) => {
|
|
let int = 0;
|
|
for (let i = 0, l = str.length; i < l; i++) {
|
|
int = (int * 26) + ALPHABET.indexOf(str[i]) + 1;
|
|
}
|
|
return int;
|
|
};
|
|
/* MAIN */
|
|
// This isn't the most efficient way to do it, but it's extremely compact and we don't care about the performance of creating the ranges too much
|
|
const makeRangeInt = (start, end) => {
|
|
if (end < start)
|
|
return makeRangeInt(end, start);
|
|
const range = [];
|
|
while (start <= end) {
|
|
range.push(start++);
|
|
}
|
|
return range;
|
|
};
|
|
const makeRangePaddedInt = (start, end, paddingLength) => {
|
|
return makeRangeInt(start, end).map(int => String(int).padStart(paddingLength, '0'));
|
|
};
|
|
const makeRangeAlpha = (start, end) => {
|
|
return makeRangeInt(alpha2int(start), alpha2int(end)).map(int2alpha);
|
|
};
|
|
/* EXPORT */
|
|
export { makeRangeInt, makeRangePaddedInt, makeRangeAlpha };
|