parent
7268243458
commit
b69c454c4c
@ -0,0 +1,132 @@ |
||||
const fs = require('fs'); |
||||
|
||||
//const inputArray = fs.readFileSync('sample.txt').toString().split("\n");
|
||||
const inputArray = fs.readFileSync('input.txt').toString().split("\n"); |
||||
|
||||
// Part One
|
||||
|
||||
const head = [[0, 0]]; |
||||
const tail = [[0, 0]]; |
||||
|
||||
for (i in inputArray) { |
||||
const contents = inputArray[i].split(" "); |
||||
const dir = contents[0]; |
||||
const dist = contents[1]; |
||||
|
||||
for (m = 1; m <= dist; m++) { |
||||
let hx = head[0][0]; |
||||
let hy = head[0][1]; |
||||
let tx = tail[0][0]; |
||||
let ty = tail[0][1]; |
||||
|
||||
if (dir === 'U') { |
||||
hy++; |
||||
} else if (dir === "D") { |
||||
hy--; |
||||
} else if (dir === "L") { |
||||
hx--; |
||||
} else if (dir === "R") { |
||||
hx++; |
||||
} |
||||
|
||||
head.unshift([hx, hy]); |
||||
tail.unshift(walk(hx, hy, tx, ty)); |
||||
} |
||||
} |
||||
|
||||
let strings = []; |
||||
for (pos of tail) { |
||||
strings.push(pos.join('-')); |
||||
} |
||||
let touched = [...new Set(strings)]; |
||||
|
||||
console.log(touched.length); |
||||
|
||||
// Part Two
|
||||
|
||||
const h = [[0, 0]]; |
||||
const one = [[0, 0]]; |
||||
const two = [[0, 0]]; |
||||
const three = [[0, 0]]; |
||||
const four = [[0, 0]]; |
||||
const five = [[0, 0]]; |
||||
const six = [[0, 0]]; |
||||
const seven = [[0, 0]]; |
||||
const eight = [[0, 0]]; |
||||
const t = [[0, 0]]; |
||||
|
||||
for (i in inputArray) { |
||||
const contents = inputArray[i].split(" "); |
||||
const dir = contents[0]; |
||||
const dist = contents[1]; |
||||
|
||||
for (m = 1; m <= dist; m++) { |
||||
let hx = h[0][0]; |
||||
let hy = h[0][1]; |
||||
|
||||
if (dir === 'U') { |
||||
hy++; |
||||
} else if (dir === "D") { |
||||
hy--; |
||||
} else if (dir === "L") { |
||||
hx--; |
||||
} else if (dir === "R") { |
||||
hx++; |
||||
} |
||||
|
||||
h.unshift([hx, hy]); |
||||
one.unshift(walk(hx, hy, one[0][0], one[0][1])); |
||||
two.unshift(walk(one[0][0], one[0][1], two[0][0], two[0][1])); |
||||
three.unshift(walk(two[0][0], two[0][1], three[0][0], three[0][1])); |
||||
four.unshift(walk(three[0][0], three[0][1], four[0][0], four[0][1])); |
||||
five.unshift(walk(four[0][0], four[0][1], five[0][0], five[0][1])); |
||||
six.unshift(walk(five[0][0], five[0][1], six[0][0], six[0][1])); |
||||
seven.unshift(walk(six[0][0], six[0][1], seven[0][0], seven[0][1])); |
||||
eight.unshift(walk(seven[0][0], seven[0][1], eight[0][0], eight[0][1])); |
||||
t.unshift(walk(eight[0][0], eight[0][1], t[0][0], t[0][1])); |
||||
} |
||||
} |
||||
|
||||
strings = []; |
||||
for (pos of t) { |
||||
strings.push(pos.join('-')); |
||||
} |
||||
touched = [...new Set(strings)]; |
||||
|
||||
console.log(touched.length); |
||||
|
||||
// functions
|
||||
|
||||
function walk(hx, hy, tx, ty) { |
||||
if ((hx > tx) && Math.abs(hx - tx) >= 2) { |
||||
tx++; |
||||
if (hy > ty) { |
||||
ty++; |
||||
} else if (ty > hy) { |
||||
ty--; |
||||
} |
||||
} else if ((tx > hx) && Math.abs(tx - hx) >= 2) { |
||||
tx--; |
||||
if (hy > ty) { |
||||
ty++; |
||||
} else if (ty > hy) { |
||||
ty--; |
||||
} |
||||
} else if ((hy > ty) && Math.abs(hy - ty) >= 2) { |
||||
ty++; |
||||
if (hx > tx) { |
||||
tx++; |
||||
} else if (tx > hx) { |
||||
tx--; |
||||
} |
||||
} else if ((ty > hy) && Math.abs(ty - hy) >= 2) { |
||||
ty--; |
||||
if (hx > tx) { |
||||
tx++; |
||||
} else if (tx > hx) { |
||||
tx--; |
||||
} |
||||
} |
||||
|
||||
return [tx, ty] |
||||
} |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,8 @@ |
||||
R 5 |
||||
U 8 |
||||
L 8 |
||||
D 3 |
||||
R 17 |
||||
D 10 |
||||
L 25 |
||||
U 20 |
Loading…
Reference in new issue