Derpcode/implementation.js

From Esolang
Jump to navigation Jump to search

An implementation of Derpcode written in node js by User:Conor O'Brien. Make sure you npm install readwrite before running.

Implementation

const rw = require("readwrite");

const derp = (herp, input) => {
    herp = herp.replace(/(\s|^)herp a-derp\.(?=\s|$)/g, "$1!").split(/\s/);
    let tape = [0, 0, 0, 0, 0, 0, 0, 0];
    let ptr = 0;
    let effs = new Map([
        ["herp", () => tape[ptr] = +!(tape[ptr])],
        ["derp", () => (ptr++, typeof tape[ptr + 7] === "undefined" && tape.push(0))],
        ["a-derp", () => ptr--]
    ]);
    let stdout = () => rw.log(String.fromCharCode(parseInt(tape.slice(ptr, ptr + 8).join(""), 2)));
    let stdin = () => tape.splice(
        ptr,
        8,
        ...([...("00000000" +
            input.shift()
                .charCodeAt()
                .toString(2)
            ).slice(-8)]).map(Number)
    );
    for(let c of herp){
        if(c === ".") stdout();
        let r = c;
        let i;
        if(/^[.?]/.test(c)){
            r = c.slice(1);
            i = c[0];
        } else if(/[.?]$/.test(c)){
            r = c.slice(0, -1);
            i = c.slice(-1);
        }
        if(!effs.has(r)) continue;
        effs.get(r)();
        if(i === ".") stdout();
    }
}

let file = process.argv[2];
let input = process.argv.slice(3).join(" ");

derp(
    rw.read(file),
    [...input]
);

Running

node Derpcode.js <filename> <input>