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...