Skip to content

Instantly share code, notes, and snippets.

@tiago
Last active October 30, 2016 16:10
Show Gist options
  • Select an option

  • Save tiago/6f3530a5a68dd4f4aa2e1e329b48c6f4 to your computer and use it in GitHub Desktop.

Select an option

Save tiago/6f3530a5a68dd4f4aa2e1e329b48c6f4 to your computer and use it in GitHub Desktop.

Revisions

  1. tiago revised this gist Oct 30, 2016. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion pixelscamp2016-challenge2-final.js
    Original file line number Diff line number Diff line change
    @@ -1,5 +1,5 @@
    c = (program, register, undefined) => {
    // There variable declarations are here just to aid compression and should be removed from the compressed output
    // These variable declarations are just to aid compression and should be removed from the compressed output
    var memory, instruction_pointer, memory_pointer, write_char, level, commands, instruction, tokens, instructions, find_matching, memory_value;

    memory = [instruction_pointer = memory_pointer = 0];
  2. tiago revised this gist Sep 26, 2016. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion pixelscamp2016-challenge2-final.js
    Original file line number Diff line number Diff line change
    @@ -25,7 +25,7 @@ c = (program, register, undefined) => {
    OOM: $ => [...memory_value+''].map(write_char)
    };

    tokens = Object.keys(commands); // assuming key order (don't try this at home kids :)
    tokens = Object.keys(commands);
    instructions = program.match(RegExp(tokens.join`|`, 'g'));

    while (instruction = instructions[instruction_pointer]) {
  3. tiago revised this gist Sep 26, 2016. 1 changed file with 0 additions and 20 deletions.
    20 changes: 0 additions & 20 deletions pixelscamp2016-challenge2-final.js
    Original file line number Diff line number Diff line change
    @@ -1,4 +1,3 @@
    // source
    c = (program, register, undefined) => {
    // There variable declarations are here just to aid compression and should be removed from the compressed output
    var memory, instruction_pointer, memory_pointer, write_char, level, commands, instruction, tokens, instructions, find_matching, memory_value;
    @@ -33,23 +32,4 @@ c = (program, register, undefined) => {
    commands[instruction](memory_value = memory[memory_pointer]);
    instruction_pointer++;
    }
    };

    // compressed
    c = (a, b, c) => {
    for (d = [e = f = 0], g = output_char, m = (a, b, c) => {
    for (h = 1, e += c; h += l[e += c] == a ? 1 : l[e] == b ? -1 : 0;);
    }, i = {
    moo: $ => m(k[0], k[7], -1) | e--,
    mOo: $ => f--,
    moO: $ => d[++f] |= 0,
    mOO: $ => 3 == n || i[k[n]](),
    Moo: $ => n ? g(String.fromCharCode(n)) : d[f] = input_char(),
    MOo: $ => d[f]--,
    MoO: $ => d[f]++,
    MOO: $ => n || m(k[7], k[0], 1),
    OOO: $ => d[f] = 0,
    MMM: $ => b ? (d[f] = b, b = c) : b = n,
    OOM: $ => [...n + ""].map(g)
    }, k = Object.keys(i), l = a.match(RegExp(k.join `|`, "g")); j = l[e];) i[j](n = d[f]), e++
    };
  4. tiago revised this gist Sep 26, 2016. 1 changed file with 20 additions and 0 deletions.
    20 changes: 20 additions & 0 deletions pixelscamp2016-challenge2-final.js
    Original file line number Diff line number Diff line change
    @@ -1,3 +1,4 @@
    // source
    c = (program, register, undefined) => {
    // There variable declarations are here just to aid compression and should be removed from the compressed output
    var memory, instruction_pointer, memory_pointer, write_char, level, commands, instruction, tokens, instructions, find_matching, memory_value;
    @@ -32,4 +33,23 @@ c = (program, register, undefined) => {
    commands[instruction](memory_value = memory[memory_pointer]);
    instruction_pointer++;
    }
    };

    // compressed
    c = (a, b, c) => {
    for (d = [e = f = 0], g = output_char, m = (a, b, c) => {
    for (h = 1, e += c; h += l[e += c] == a ? 1 : l[e] == b ? -1 : 0;);
    }, i = {
    moo: $ => m(k[0], k[7], -1) | e--,
    mOo: $ => f--,
    moO: $ => d[++f] |= 0,
    mOO: $ => 3 == n || i[k[n]](),
    Moo: $ => n ? g(String.fromCharCode(n)) : d[f] = input_char(),
    MOo: $ => d[f]--,
    MoO: $ => d[f]++,
    MOO: $ => n || m(k[7], k[0], 1),
    OOO: $ => d[f] = 0,
    MMM: $ => b ? (d[f] = b, b = c) : b = n,
    OOM: $ => [...n + ""].map(g)
    }, k = Object.keys(i), l = a.match(RegExp(k.join `|`, "g")); j = l[e];) i[j](n = d[f]), e++
    };
  5. tiago revised this gist Sep 26, 2016. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion pixelscamp2016-challenge2-final.js
    Original file line number Diff line number Diff line change
    @@ -1,5 +1,5 @@
    c = (program, register, undefined) => {
    // There variable declarations are here just to aid compression
    // There variable declarations are here just to aid compression and should be removed from the compressed output
    var memory, instruction_pointer, memory_pointer, write_char, level, commands, instruction, tokens, instructions, find_matching, memory_value;

    memory = [instruction_pointer = memory_pointer = 0];
  6. tiago revised this gist Sep 26, 2016. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion pixelscamp2016-challenge2-final.js
    Original file line number Diff line number Diff line change
    @@ -1,5 +1,5 @@
    c = (program, register, undefined) => {
    // This is here just to aid compression, to remove in the compressed output
    // There variable declarations are here just to aid compression
    var memory, instruction_pointer, memory_pointer, write_char, level, commands, instruction, tokens, instructions, find_matching, memory_value;

    memory = [instruction_pointer = memory_pointer = 0];
  7. tiago created this gist Sep 26, 2016.
    35 changes: 35 additions & 0 deletions pixelscamp2016-challenge2-final.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,35 @@
    c = (program, register, undefined) => {
    // This is here just to aid compression, to remove in the compressed output
    var memory, instruction_pointer, memory_pointer, write_char, level, commands, instruction, tokens, instructions, find_matching, memory_value;

    memory = [instruction_pointer = memory_pointer = 0];
    write_char = output_char;

    find_matching = (start, stop, direction) => {
    level = 1;
    instruction_pointer += direction;
    while(level += instructions[instruction_pointer += direction] == start ? 1 : instructions[instruction_pointer] == stop ? -1 : 0);
    }

    commands = {
    moo: $ => find_matching(tokens[0], tokens[7], -1) | instruction_pointer--,
    mOo: $ => memory_pointer--,
    moO: $ => memory[++memory_pointer] |= 0,
    mOO: $ => memory_value == 3 || commands[tokens[memory_value]](),
    Moo: $ => memory_value ? write_char(String.fromCharCode(memory_value)) : memory[memory_pointer] = input_char(),
    MOo: $ => memory[memory_pointer]--,
    MoO: $ => memory[memory_pointer]++,
    MOO: $ => memory_value || find_matching(tokens[7], tokens[0], 1),
    OOO: $ => memory[memory_pointer] = 0,
    MMM: $ => register ? (memory[memory_pointer] = register, register = undefined) : register = memory_value,
    OOM: $ => [...memory_value+''].map(write_char)
    };

    tokens = Object.keys(commands); // assuming key order (don't try this at home kids :)
    instructions = program.match(RegExp(tokens.join`|`, 'g'));

    while (instruction = instructions[instruction_pointer]) {
    commands[instruction](memory_value = memory[memory_pointer]);
    instruction_pointer++;
    }
    };