summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Piotr Russ <mail@pruss.it> 2020-12-12 10:47:16 +0100
committerGravatar Piotr Russ <mail@pruss.it> 2020-12-12 10:47:16 +0100
commit21b42b5a3910c3efb670660fbf417a832ec0a238 (patch)
treee60d88471c6f47bde22bb33e956054098ba43317
parent2fdbbd79bed58399ab63f92ece74fe6abb450b9c (diff)
downloadadvent_of_code_2020-21b42b5a3910c3efb670660fbf417a832ec0a238.tar.gz
advent_of_code_2020-21b42b5a3910c3efb670660fbf417a832ec0a238.tar.bz2
advent_of_code_2020-21b42b5a3910c3efb670660fbf417a832ec0a238.zip
day12
-rw-r--r--day12/data.js799
-rw-r--r--day12/day12-1.js36
-rw-r--r--day12/day12-2.js42
3 files changed, 877 insertions, 0 deletions
diff --git a/day12/data.js b/day12/data.js
new file mode 100644
index 0000000..180f80a
--- /dev/null
+++ b/day12/data.js
@@ -0,0 +1,799 @@
+data=`
+N5
+W1
+F61
+W2
+R90
+F50
+N2
+F40
+E4
+F48
+R180
+F17
+W4
+N5
+F3
+W3
+F1
+R90
+S2
+F23
+L90
+S3
+W3
+S4
+E4
+L90
+W3
+S3
+E4
+N2
+F28
+S2
+W2
+L180
+E3
+R90
+E3
+F83
+W5
+S4
+W3
+N2
+W5
+F90
+N2
+F82
+N2
+F2
+S4
+L90
+N3
+L90
+S2
+F12
+S3
+F40
+L90
+F56
+N1
+F29
+W2
+S2
+R270
+S4
+F14
+E4
+R90
+E2
+S2
+E2
+F82
+L90
+N3
+R180
+R90
+S1
+W1
+L90
+S2
+F78
+W2
+F52
+N4
+W5
+F38
+L90
+W2
+S2
+L90
+F66
+R90
+F62
+E3
+S5
+L90
+F99
+F2
+E4
+R90
+N3
+W4
+N1
+F71
+E2
+N3
+N2
+R90
+E2
+F66
+S4
+R90
+E5
+F29
+E5
+L90
+W2
+N2
+E3
+F18
+L180
+F17
+W1
+R90
+W3
+S5
+R90
+S3
+R180
+N5
+F69
+W1
+W3
+L180
+F72
+W5
+N1
+R180
+W3
+W4
+F85
+W4
+L90
+E4
+N5
+F73
+R90
+F70
+E4
+F79
+S5
+R180
+E2
+F35
+E4
+L270
+W2
+L90
+N5
+R90
+N4
+F64
+W2
+R270
+F33
+N5
+E4
+F94
+W1
+N1
+R90
+F79
+F46
+E1
+R180
+S3
+W3
+F72
+E1
+W4
+F95
+W2
+L90
+N3
+L90
+F85
+W3
+W1
+F54
+N3
+E1
+N4
+E5
+L90
+F61
+W2
+F7
+L180
+F87
+N4
+W1
+F87
+F3
+E3
+F63
+R90
+S4
+R180
+S4
+R180
+R90
+R90
+E5
+N4
+E2
+F86
+S3
+F98
+N4
+F70
+L90
+E4
+F26
+W4
+F19
+L90
+S4
+W4
+F84
+N1
+E4
+L180
+S2
+F74
+S1
+F86
+R90
+S2
+F78
+N4
+S2
+W1
+N5
+E2
+F38
+W4
+N1
+F75
+S1
+E1
+N3
+S1
+F54
+N3
+F88
+N5
+L180
+F15
+S2
+S2
+E2
+N3
+F97
+S3
+N3
+E3
+N5
+E3
+R90
+F87
+L90
+F15
+L90
+E5
+R90
+F70
+N3
+W2
+F47
+W2
+W3
+F17
+R90
+F95
+E4
+F28
+W4
+R90
+E2
+R180
+N4
+R180
+W4
+R270
+F73
+W1
+N2
+L90
+S1
+F65
+E1
+F42
+N2
+F74
+R90
+F21
+W5
+S1
+N5
+R90
+E4
+N5
+S5
+F99
+W4
+L180
+W1
+F83
+N2
+W2
+F87
+E2
+S3
+W1
+L180
+F89
+S1
+W2
+E2
+L90
+S2
+W1
+S5
+R180
+E5
+N1
+F82
+S3
+F7
+L90
+F31
+L90
+N3
+F84
+W3
+N4
+F100
+N1
+E2
+R90
+F90
+N3
+F43
+R90
+F2
+W4
+L90
+F87
+L90
+E3
+F71
+L180
+N1
+L90
+E4
+N3
+F31
+W1
+F80
+R270
+N1
+E4
+N1
+F22
+N4
+E1
+F57
+R90
+N3
+W2
+L180
+N3
+L180
+W4
+F59
+S4
+F10
+N5
+L90
+S3
+L90
+E1
+F96
+E4
+N3
+F54
+L180
+F47
+W1
+N4
+E1
+S4
+R180
+L90
+N1
+R90
+N3
+R90
+N4
+R90
+S3
+F59
+N5
+L90
+E4
+F72
+W4
+F76
+R90
+E3
+F70
+L180
+N3
+W2
+R90
+F65
+L90
+F71
+S3
+F43
+R90
+W2
+N2
+R90
+W1
+R90
+S4
+R180
+S1
+E3
+F72
+L90
+F61
+L90
+F75
+S1
+S5
+F15
+R90
+E3
+N2
+L270
+F48
+N1
+R180
+W2
+F69
+E4
+R90
+R90
+W1
+S5
+W5
+R90
+S4
+S3
+F51
+F43
+E2
+N5
+L180
+F89
+W1
+R90
+F59
+R90
+E2
+F51
+R90
+F91
+W4
+S5
+E4
+L90
+S5
+R90
+F44
+F47
+E4
+W1
+F77
+S5
+R90
+N2
+F87
+N4
+R90
+W5
+R90
+W5
+F89
+L90
+F61
+E2
+F29
+N4
+R90
+F31
+S1
+L90
+E5
+N2
+F7
+L180
+S4
+F63
+W4
+N5
+S2
+N1
+E5
+F87
+S5
+R180
+F14
+W4
+R180
+E1
+L90
+F67
+E2
+L90
+E5
+S2
+L90
+W2
+R90
+F94
+W4
+R90
+W3
+S3
+R90
+N5
+F55
+L90
+F43
+L90
+N5
+F16
+E4
+N2
+L270
+W3
+E1
+N2
+R180
+F51
+N5
+N1
+F36
+W4
+F38
+N5
+W1
+F29
+R180
+L90
+N1
+W3
+E1
+F78
+E1
+N1
+E2
+F57
+E4
+F83
+W5
+F32
+N3
+W4
+F36
+N2
+E3
+F74
+N4
+F54
+W5
+L90
+S1
+F42
+W4
+S5
+E3
+F64
+W2
+R180
+S2
+E1
+N2
+R90
+W3
+F36
+N3
+R90
+S2
+F53
+W2
+F85
+E5
+N2
+F9
+E1
+F83
+L90
+E5
+F44
+L90
+F92
+W5
+R270
+E4
+S1
+F6
+L90
+F96
+R90
+N1
+E4
+N1
+W3
+S2
+S4
+F39
+E1
+S1
+F82
+S3
+F78
+L90
+N4
+E1
+N2
+R90
+F63
+S3
+L180
+F52
+W2
+F49
+W2
+L270
+N1
+R180
+E3
+F79
+F73
+N1
+R90
+N3
+R180
+S2
+F35
+S1
+F43
+S1
+R90
+S4
+W4
+F12
+S1
+F2
+N3
+E4
+L90
+F51
+R90
+N4
+F90
+R90
+F99
+E3
+N1
+R90
+S3
+L270
+W5
+L90
+R270
+F50
+N5
+F33
+S3
+F18
+L90
+E4
+L180
+W4
+R90
+F21
+W4
+F24
+W2
+E5
+N3
+W1
+R90
+W3
+S3
+F82
+W1
+S1
+F12
+N3
+L90
+F37
+R180
+F36
+F27
+E3
+S3
+F36
+W4
+S1
+F6
+R90
+F59
+S1
+E1
+R180
+S2
+W3
+L90
+F45
+R90
+E1
+F29
+S5
+W3
+S5
+W4
+L270
+S2
+F13
+E4
+F28
+R90
+F80
+S4
+E1
+S2
+F62
+R90
+F26
+L180
+F19
+W2
+L180
+W5
+F15
+N1
+F68
+E4
+F75
+S2
+F58
+S4
+R180
+E3
+N1
+L90
+S2
+F12
+R90
+E5
+S5
+W4
+N5
+W1
+R180
+S1
+F70
+R90
+F97
+L90
+E3
+S3
+L270
+E1
+F51
+N4
+L180
+N1
+R90
+F42
+`
+
+module.exports = data
diff --git a/day12/day12-1.js b/day12/day12-1.js
new file mode 100644
index 0000000..fcac692
--- /dev/null
+++ b/day12/day12-1.js
@@ -0,0 +1,36 @@
+const data = require('./data')
+let pos = {x: 0, y: 0}
+let direction = 90
+
+const move = (dir => {
+ const dir1 = dir.substring(0, 1)
+ const dir2 = parseInt(dir.substring(1, dir.length))
+
+ switch(dir1) {
+ case 'N': pos.y += dir2; break;
+ case 'S': pos.y -= dir2; break;
+ case 'E': pos.x += dir2; break;
+ case 'W': pos.x -= dir2; break;
+ case 'L':
+ direction -= dir2
+ if (direction < 0) { direction += 360 }
+ break;
+ case 'R':
+ direction += dir2
+ if (direction >= 360) { direction -= 360 }
+ break;
+ case 'F':
+ switch(direction) {
+ case 0: pos.y += dir2; break;
+ case 90: pos.x += dir2; break;
+ case 180: pos.y -= dir2; break;
+ case 270: pos.x -= dir2; break;
+ default: console.log(`unknown direction`);
+ }
+ break;
+ default: console.log(`unknown value`);
+ }
+})
+
+data.split(/\n/g).filter(e => e).forEach(e => move(e))
+console.log(Math.abs(pos.x) + Math.abs(pos.y))
diff --git a/day12/day12-2.js b/day12/day12-2.js
new file mode 100644
index 0000000..51cc8a1
--- /dev/null
+++ b/day12/day12-2.js
@@ -0,0 +1,42 @@
+const data = require('./data')
+let pos = {x: 0, y: 0}
+let vp = {x: 10, y: 1}
+
+const move = (dir => {
+ const dir1 = dir.substring(0, 1)
+ const dir2 = parseInt(dir.substring(1, dir.length))
+
+ switch(dir1) {
+ case 'N': vp.y += dir2; break;
+ case 'S': vp.y -= dir2; break;
+ case 'E': vp.x += dir2; break;
+ case 'W': vp.x -= dir2; break;
+ case 'L':
+ switch(dir2%360) {
+ case 0: break
+ case 90: [vp.x, vp.y] = [-vp.y, vp.x]; break
+ case 180: [vp.x, vp.y] = [-vp.x, -vp.y]; break
+ case 270: [vp.x, vp.y] = [vp.y, -vp.x]; break
+ default: console.log('unknown value turning left', dir2);
+ }
+ break;
+ case 'R':
+ switch(dir2%360) {
+ case 0: break
+ case 90: [vp.x, vp.y] = [vp.y, -vp.x]; break
+ case 180: [vp.x, vp.y] = [-vp.x, -vp.y]; break
+ case 270: [vp.x, vp.y] = [-vp.y, vp.x]; break
+ default: console.log('unknown value turning right', dir2);
+ }
+ break;
+ case 'F':
+ pos.x += vp.x * dir2
+ pos.y += vp.y * dir2
+ break;
+ default:
+ console.log(`unknown value`);
+ }
+})
+
+data.split(/\n/g).filter(e => e).forEach(e => move(e))
+console.log(Math.abs(pos.x) + Math.abs(pos.y))