Data update
This commit is contained in:
parent
72eb4943cb
commit
4d5544505c
2347 changed files with 62432 additions and 16731 deletions
|
|
@ -3,7 +3,7 @@
|
|||
stx$ = "¹"
|
||||
etx$ = "²"
|
||||
#
|
||||
proc sort . d$[] .
|
||||
proc sort &d$[] .
|
||||
for i = 2 to len d$[]
|
||||
h$ = d$[i]
|
||||
j = i - 1
|
||||
|
|
@ -22,16 +22,12 @@ func$ bwt s$ .
|
|||
tbl$[] &= b$ & a$
|
||||
.
|
||||
sort tbl$[]
|
||||
for s$ in tbl$[]
|
||||
r$ &= substr s$ len s$ 1
|
||||
.
|
||||
for s$ in tbl$[] : r$ &= substr s$ len s$ 1
|
||||
return r$
|
||||
.
|
||||
func$ ibwt r$ .
|
||||
le = len r$
|
||||
for i to le
|
||||
tbl$[] &= ""
|
||||
.
|
||||
for i to le : tbl$[] &= ""
|
||||
for j to le
|
||||
for i to le
|
||||
tbl$[i] = substr r$ i 1 & tbl$[i]
|
||||
|
|
|
|||
|
|
@ -0,0 +1,76 @@
|
|||
class BWT {
|
||||
static STX = "\u0002";
|
||||
static ETX = "\u0003";
|
||||
|
||||
static bwt(s) {
|
||||
if (s.includes(BWT.STX) || s.includes(BWT.ETX)) {
|
||||
throw new Error("String cannot contain STX or ETX");
|
||||
}
|
||||
|
||||
const ss = BWT.STX + s + BWT.ETX;
|
||||
const table = [];
|
||||
for (let i = 0; i < ss.length; i++) {
|
||||
const before = ss.substring(i);
|
||||
const after = ss.substring(0, i);
|
||||
table.push(before + after);
|
||||
}
|
||||
table.sort();
|
||||
|
||||
let sb = "";
|
||||
for (const str of table) {
|
||||
sb += str.charAt(str.length - 1);
|
||||
}
|
||||
return sb;
|
||||
}
|
||||
|
||||
static ibwt(r) {
|
||||
const len = r.length;
|
||||
const table = [];
|
||||
for (let i = 0; i < len; ++i) {
|
||||
table.push("");
|
||||
}
|
||||
for (let j = 0; j < len; ++j) {
|
||||
for (let i = 0; i < len; ++i) {
|
||||
table[i] = r.charAt(i) + table[i];
|
||||
}
|
||||
table.sort();
|
||||
}
|
||||
for (const row of table) {
|
||||
if (row.endsWith(BWT.ETX)) {
|
||||
return row.substring(1, len - 1);
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
static makePrintable(s) {
|
||||
// substitute ^ for STX and | for ETX to print results
|
||||
return s.replace(BWT.STX, "^").replace(BWT.ETX, "|");
|
||||
}
|
||||
|
||||
static main() {
|
||||
const tests = [
|
||||
"banana",
|
||||
"appellee",
|
||||
"dogwood",
|
||||
"TO BE OR NOT TO BE OR WANT TO BE OR NOT?",
|
||||
"SIX.MIXED.PIXIES.SIFT.SIXTY.PIXIE.DUST.BOXES",
|
||||
"\u0002ABC\u0003"
|
||||
];
|
||||
for (const test of tests) {
|
||||
console.log(BWT.makePrintable(test));
|
||||
process.stdout.write(" --> ");
|
||||
let t = "";
|
||||
try {
|
||||
t = BWT.bwt(test);
|
||||
console.log(BWT.makePrintable(t));
|
||||
} catch (e) {
|
||||
console.log("ERROR: " + e.message);
|
||||
}
|
||||
const r = BWT.ibwt(t);
|
||||
console.log(` --> ${r}\n`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BWT.main();
|
||||
Loading…
Add table
Add a link
Reference in a new issue