* Fix workflow * Trigger * [auto] Update compiled version * [auto] Commit modules * Push Windows changes * Fix * [auto] Update compiled version * Try removing cwd * [auto] Update compiled version * Try with path module * [auto] Update compiled version * Fix path * [auto] Update compiled version * Use raw path * [auto] Update compiled version * Other path * [auto] Update compiled version * Avoid @action/exec * [auto] Update compiled version * test * [auto] Update compiled version * test * [auto] Update compiled version * test * [auto] Update compiled version * test * [auto] Update compiled version * Try with shelljs * [auto] Update compiled version * Fix my stupidity * Copy scripts to local dir * [auto] Update compiled version * Still use path * [auto] Update compiled version * Delete entrypoint.sh * [auto] Update compiled version * Make file executable * [auto] Update compiled version * Try using bash * [auto] Update compiled version
52 lines
1.0 KiB
JavaScript
52 lines
1.0 KiB
JavaScript
"use strict";
|
|
|
|
const CHARSET = ("abcdefghijklmnopqrstuvwxyz" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ$_").split("");
|
|
module.exports = class Charset {
|
|
constructor(shouldConsider) {
|
|
this.shouldConsider = shouldConsider;
|
|
this.chars = CHARSET.slice();
|
|
this.frequency = {};
|
|
this.chars.forEach(c => {
|
|
this.frequency[c] = 0;
|
|
});
|
|
this.finalized = false;
|
|
}
|
|
|
|
consider(str) {
|
|
if (!this.shouldConsider) {
|
|
return;
|
|
}
|
|
|
|
str.split("").forEach(c => {
|
|
if (this.frequency[c] != null) {
|
|
this.frequency[c]++;
|
|
}
|
|
});
|
|
}
|
|
|
|
sort() {
|
|
if (this.shouldConsider) {
|
|
this.chars = this.chars.sort((a, b) => this.frequency[b] - this.frequency[a]);
|
|
}
|
|
|
|
this.finalized = true;
|
|
}
|
|
|
|
getIdentifier(num) {
|
|
if (!this.finalized) {
|
|
throw new Error("Should sort first");
|
|
}
|
|
|
|
let ret = "";
|
|
num++;
|
|
|
|
do {
|
|
num--;
|
|
ret += this.chars[num % this.chars.length];
|
|
num = Math.floor(num / this.chars.length);
|
|
} while (num > 0);
|
|
|
|
return ret;
|
|
}
|
|
|
|
}; |