Skip to content

Instantly share code, notes, and snippets.

@lethern
Created December 13, 2018 16:24
Show Gist options
  • Save lethern/30fc59f766d2b27c88c8f14af86ac140 to your computer and use it in GitHub Desktop.
Save lethern/30fc59f766d2b27c88c8f14af86ac140 to your computer and use it in GitHub Desktop.
var fs = require('fs');
var diff = 'a'.codePointAt(0) - 'A'.codePointAt(0);
var N = 'z'.codePointAt(0) - 'a'.codePointAt(0);
fs.readFile('E:\\javascript\\AdventOfCode\\13_input', 'utf8', function (err, _contents)
{
let contents = _contents.split`\n`.map(c=>c.split``);
let sortByPosition = (a, b) =>
a.y != b.y ? a.y - b.y : a.x - b.x;
// read carts
let carts = [];
let cart_id = 0;
for (let x = 0; x < contents[0].length; ++x) {
for (let y = 0; y < contents.length; ++y) {
let cell = contents[y][x];
if (cell == '^' || cell == 'v' || cell == '<' || cell == '>') {
carts.push({ x, y, dir: cell, cart_id });
++cart_id;
if (cell == '^' || cell == 'v'){
contents[y][x] = '|';
} else {
contents[y][x] = '-';
}
}
}
}
let _print = () => {
let p = [];
for (let y = 0; y < contents.length; ++y) {
p[y] = [];
for (let x = 0; x < contents[0].length; ++x) {
p[y][x] = contents[y][x];
}
}
for(let cart of carts) {
p[cart.y][cart.x] = cart.dir;
}
for (let y = 0; y < contents.length; ++y) {
console.log(p[y].join(''));
}
console.log('____________________________________________');
};
// simulate
let max_n=200;
outer: while (max_n--) {
carts.sort();
for(let cart of carts) {
if (cart.dir == '^') {
cart.y--;
} else if (cart.dir == 'v') {
cart.y++;
} else if (cart.dir == '<') {
cart.x--;
} else if (cart.dir == '>') {
cart.x++;
}
let next_cell = contents[cart.y][cart.x];
if (next_cell == '/') {
if (cart.dir == '^') cart.dir = '>';
else if (cart.dir == '<') cart.dir = 'v';
else if (cart.dir == 'v') cart.dir = '<';
else if (cart.dir == '>') cart.dir = '^';
} else if (next_cell == '\\') {
if (cart.dir == '^') cart.dir = '<';
else if (cart.dir == '<') cart.dir = '^';
else if (cart.dir == 'v') cart.dir = '>';
else if (cart.dir == '>') cart.dir = 'v';
} else if (next_cell == '+') {
let next_turn = cart.next_turn || 1;
let old_dir = cart.dir;
if (next_turn == 1) {
if (cart.dir == '^') cart.dir = '<';
else if (cart.dir == '<') cart.dir = 'v';
else if (cart.dir == 'v') cart.dir = '>';
else if (cart.dir == '>') cart.dir = '^';
} else if (next_turn == 3) {
if (cart.dir == '^') cart.dir = '>';
else if (cart.dir == '<') cart.dir = '^';
else if (cart.dir == 'v') cart.dir = '<';
else if (cart.dir == '>') cart.dir = 'v';
}
cart.next_turn = (next_turn % 3) + 1;
}
}
//_print();
}
} );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment