proof that {} level 5 is TC
by otesunki
JavaScript
function BF2L5(bf) {
class InfiniteArray {
constructor() {
this.elements = {};
}
get(i) {
if (!(i in this.elements))
this.elements[i] = 0;
return this.elements[i];
}
set(i, v) {
this.elements[i] = v;
}
dbg() {
let end = Math.max(...Object.keys(this.elements).map(x => Number(x)));
let arr = new Array(end + 1);
for (let i = 0; i < end + 1; i++)
arr[i] = this.get(i);
return arr;
}
}
function just(token) {
return function(string) {
if (string.startsWith(token)) {
return {
parses: true,
next: string.slice(token.length),
result: []
};
}
return {
parses: false,
next: string.slice(token.length),
result: []
};
};
}
function chain(...parsers) {
return function(string) {
let result = [];
let parsing = string;
for (let parser of parsers) {
let back = parser(parsing);
if (!back.parses) {
return {
parses: false,
next: parsing,
result
};
}
result = result.concat(back.result);
parsing = back.next;
}
return {
parses: true,
next: parsing,
result
};
};
}
function alternatives(...parsers) {
return function(string) {
for (let parser of parsers) {
let back = parser(string);
if (back.parses)
return back;
}
return {
parses: false,
next: string,
result: []
};
};
}
function process(parser, func) {
return function(string) {
let back = parser(string);
if (!back.parses)
return {
parses: back.parses,
next: back.next,
result: undefined
};
return {
parses: back.parses,
next: back.next,
result: [func(...back.result)]
};
};
}
function...