mirror of https://github.com/HeNine/aoc2020
day12
parent
0b4d7cde39
commit
cfc301b866
@ -0,0 +1,9 @@
|
|||||||
|
[package]
|
||||||
|
name = "day12"
|
||||||
|
version = "0.1.0"
|
||||||
|
authors = ["henine <why@no.com>"]
|
||||||
|
edition = "2018"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
@ -0,0 +1,779 @@
|
|||||||
|
E1
|
||||||
|
S4
|
||||||
|
W5
|
||||||
|
N5
|
||||||
|
W2
|
||||||
|
L90
|
||||||
|
E5
|
||||||
|
R90
|
||||||
|
F73
|
||||||
|
E1
|
||||||
|
N3
|
||||||
|
E5
|
||||||
|
R180
|
||||||
|
E1
|
||||||
|
F26
|
||||||
|
N5
|
||||||
|
W5
|
||||||
|
R180
|
||||||
|
E5
|
||||||
|
F50
|
||||||
|
E4
|
||||||
|
F63
|
||||||
|
S2
|
||||||
|
F24
|
||||||
|
R90
|
||||||
|
E2
|
||||||
|
L90
|
||||||
|
N2
|
||||||
|
F94
|
||||||
|
S4
|
||||||
|
F70
|
||||||
|
N3
|
||||||
|
F60
|
||||||
|
L90
|
||||||
|
W5
|
||||||
|
R90
|
||||||
|
E2
|
||||||
|
R90
|
||||||
|
F38
|
||||||
|
R180
|
||||||
|
S3
|
||||||
|
L90
|
||||||
|
R90
|
||||||
|
S1
|
||||||
|
L180
|
||||||
|
W3
|
||||||
|
F23
|
||||||
|
N4
|
||||||
|
R90
|
||||||
|
N1
|
||||||
|
E3
|
||||||
|
S3
|
||||||
|
F26
|
||||||
|
S5
|
||||||
|
E1
|
||||||
|
E2
|
||||||
|
S3
|
||||||
|
E5
|
||||||
|
N2
|
||||||
|
E2
|
||||||
|
L90
|
||||||
|
F9
|
||||||
|
S4
|
||||||
|
F77
|
||||||
|
F70
|
||||||
|
F92
|
||||||
|
N1
|
||||||
|
W4
|
||||||
|
R90
|
||||||
|
S3
|
||||||
|
F56
|
||||||
|
N2
|
||||||
|
F21
|
||||||
|
R90
|
||||||
|
E5
|
||||||
|
W5
|
||||||
|
F87
|
||||||
|
E1
|
||||||
|
L90
|
||||||
|
N3
|
||||||
|
W4
|
||||||
|
N4
|
||||||
|
F86
|
||||||
|
L90
|
||||||
|
W2
|
||||||
|
E2
|
||||||
|
F94
|
||||||
|
S1
|
||||||
|
E5
|
||||||
|
L90
|
||||||
|
W5
|
||||||
|
N4
|
||||||
|
W4
|
||||||
|
S2
|
||||||
|
W4
|
||||||
|
L180
|
||||||
|
F29
|
||||||
|
R180
|
||||||
|
E2
|
||||||
|
F12
|
||||||
|
S3
|
||||||
|
W4
|
||||||
|
F48
|
||||||
|
L90
|
||||||
|
W4
|
||||||
|
L90
|
||||||
|
F69
|
||||||
|
N1
|
||||||
|
F51
|
||||||
|
L270
|
||||||
|
F62
|
||||||
|
W2
|
||||||
|
R90
|
||||||
|
W2
|
||||||
|
F5
|
||||||
|
L90
|
||||||
|
F62
|
||||||
|
E3
|
||||||
|
N3
|
||||||
|
W5
|
||||||
|
R90
|
||||||
|
E3
|
||||||
|
L90
|
||||||
|
F6
|
||||||
|
E1
|
||||||
|
W5
|
||||||
|
F72
|
||||||
|
R180
|
||||||
|
E5
|
||||||
|
L180
|
||||||
|
F38
|
||||||
|
E1
|
||||||
|
N5
|
||||||
|
R90
|
||||||
|
F98
|
||||||
|
N4
|
||||||
|
F69
|
||||||
|
W3
|
||||||
|
R270
|
||||||
|
N4
|
||||||
|
F53
|
||||||
|
E3
|
||||||
|
N5
|
||||||
|
R180
|
||||||
|
F2
|
||||||
|
R90
|
||||||
|
L90
|
||||||
|
F38
|
||||||
|
N3
|
||||||
|
E1
|
||||||
|
F100
|
||||||
|
E3
|
||||||
|
L90
|
||||||
|
N5
|
||||||
|
F74
|
||||||
|
F38
|
||||||
|
W2
|
||||||
|
F8
|
||||||
|
N4
|
||||||
|
E3
|
||||||
|
F84
|
||||||
|
L270
|
||||||
|
S1
|
||||||
|
F38
|
||||||
|
S3
|
||||||
|
F92
|
||||||
|
L90
|
||||||
|
F12
|
||||||
|
S3
|
||||||
|
F83
|
||||||
|
E5
|
||||||
|
R90
|
||||||
|
E1
|
||||||
|
N3
|
||||||
|
F70
|
||||||
|
N4
|
||||||
|
F47
|
||||||
|
N5
|
||||||
|
L90
|
||||||
|
F29
|
||||||
|
R90
|
||||||
|
S2
|
||||||
|
W5
|
||||||
|
F20
|
||||||
|
R90
|
||||||
|
E3
|
||||||
|
F58
|
||||||
|
N2
|
||||||
|
E1
|
||||||
|
F2
|
||||||
|
R90
|
||||||
|
E5
|
||||||
|
F9
|
||||||
|
E3
|
||||||
|
L180
|
||||||
|
E4
|
||||||
|
F11
|
||||||
|
E5
|
||||||
|
L90
|
||||||
|
F64
|
||||||
|
W1
|
||||||
|
F13
|
||||||
|
R90
|
||||||
|
W4
|
||||||
|
R90
|
||||||
|
N1
|
||||||
|
E3
|
||||||
|
F29
|
||||||
|
S5
|
||||||
|
W3
|
||||||
|
N3
|
||||||
|
W3
|
||||||
|
L90
|
||||||
|
F100
|
||||||
|
E2
|
||||||
|
F93
|
||||||
|
R90
|
||||||
|
F34
|
||||||
|
N1
|
||||||
|
F51
|
||||||
|
R90
|
||||||
|
E2
|
||||||
|
R90
|
||||||
|
W4
|
||||||
|
L90
|
||||||
|
E3
|
||||||
|
R180
|
||||||
|
W1
|
||||||
|
W4
|
||||||
|
S2
|
||||||
|
F88
|
||||||
|
S3
|
||||||
|
W3
|
||||||
|
N4
|
||||||
|
E5
|
||||||
|
S4
|
||||||
|
E2
|
||||||
|
F80
|
||||||
|
R90
|
||||||
|
S5
|
||||||
|
R90
|
||||||
|
F46
|
||||||
|
E1
|
||||||
|
N2
|
||||||
|
L90
|
||||||
|
F52
|
||||||
|
F92
|
||||||
|
W4
|
||||||
|
R90
|
||||||
|
S5
|
||||||
|
F21
|
||||||
|
N2
|
||||||
|
F37
|
||||||
|
S1
|
||||||
|
L180
|
||||||
|
N4
|
||||||
|
E1
|
||||||
|
L90
|
||||||
|
F17
|
||||||
|
L90
|
||||||
|
F95
|
||||||
|
E5
|
||||||
|
R180
|
||||||
|
W2
|
||||||
|
L90
|
||||||
|
W4
|
||||||
|
R180
|
||||||
|
S2
|
||||||
|
W1
|
||||||
|
E2
|
||||||
|
N2
|
||||||
|
F88
|
||||||
|
E3
|
||||||
|
R180
|
||||||
|
W4
|
||||||
|
L180
|
||||||
|
E2
|
||||||
|
S2
|
||||||
|
R90
|
||||||
|
S5
|
||||||
|
L90
|
||||||
|
S1
|
||||||
|
L90
|
||||||
|
N4
|
||||||
|
W4
|
||||||
|
F52
|
||||||
|
S5
|
||||||
|
F23
|
||||||
|
W2
|
||||||
|
R90
|
||||||
|
F100
|
||||||
|
W1
|
||||||
|
N3
|
||||||
|
L90
|
||||||
|
E1
|
||||||
|
F8
|
||||||
|
L90
|
||||||
|
F97
|
||||||
|
N1
|
||||||
|
F46
|
||||||
|
N3
|
||||||
|
F10
|
||||||
|
W3
|
||||||
|
R180
|
||||||
|
N5
|
||||||
|
L90
|
||||||
|
F85
|
||||||
|
N5
|
||||||
|
L90
|
||||||
|
E1
|
||||||
|
F29
|
||||||
|
L90
|
||||||
|
E3
|
||||||
|
W3
|
||||||
|
S5
|
||||||
|
L270
|
||||||
|
W1
|
||||||
|
N3
|
||||||
|
E3
|
||||||
|
F87
|
||||||
|
R180
|
||||||
|
F15
|
||||||
|
S1
|
||||||
|
R180
|
||||||
|
N1
|
||||||
|
F37
|
||||||
|
E3
|
||||||
|
R90
|
||||||
|
E1
|
||||||
|
N3
|
||||||
|
L90
|
||||||
|
F73
|
||||||
|
R90
|
||||||
|
F15
|
||||||
|
F6
|
||||||
|
L180
|
||||||
|
S5
|
||||||
|
F8
|
||||||
|
S2
|
||||||
|
R90
|
||||||
|
W3
|
||||||
|
N1
|
||||||
|
L180
|
||||||
|
F87
|
||||||
|
N4
|
||||||
|
R180
|
||||||
|
N5
|
||||||
|
L90
|
||||||
|
W3
|
||||||
|
N5
|
||||||
|
R90
|
||||||
|
E4
|
||||||
|
F35
|
||||||
|
E1
|
||||||
|
L90
|
||||||
|
S1
|
||||||
|
E1
|
||||||
|
F58
|
||||||
|
E1
|
||||||
|
W3
|
||||||
|
S1
|
||||||
|
L270
|
||||||
|
F65
|
||||||
|
W3
|
||||||
|
F27
|
||||||
|
S2
|
||||||
|
F68
|
||||||
|
R90
|
||||||
|
E5
|
||||||
|
F80
|
||||||
|
R90
|
||||||
|
W5
|
||||||
|
R180
|
||||||
|
S5
|
||||||
|
L90
|
||||||
|
W1
|
||||||
|
F63
|
||||||
|
E2
|
||||||
|
R270
|
||||||
|
S2
|
||||||
|
R90
|
||||||
|
L90
|
||||||
|
E4
|
||||||
|
R90
|
||||||
|
S3
|
||||||
|
R270
|
||||||
|
L180
|
||||||
|
F78
|
||||||
|
W4
|
||||||
|
R90
|
||||||
|
W1
|
||||||
|
F33
|
||||||
|
N1
|
||||||
|
F1
|
||||||
|
F79
|
||||||
|
R90
|
||||||
|
W5
|
||||||
|
S5
|
||||||
|
N3
|
||||||
|
L270
|
||||||
|
E1
|
||||||
|
R180
|
||||||
|
S1
|
||||||
|
N1
|
||||||
|
W2
|
||||||
|
R90
|
||||||
|
S4
|
||||||
|
R270
|
||||||
|
F49
|
||||||
|
F39
|
||||||
|
E2
|
||||||
|
F6
|
||||||
|
N5
|
||||||
|
R90
|
||||||
|
N2
|
||||||
|
E3
|
||||||
|
L90
|
||||||
|
F30
|
||||||
|
L180
|
||||||
|
W2
|
||||||
|
L90
|
||||||
|
F39
|
||||||
|
L270
|
||||||
|
S3
|
||||||
|
F89
|
||||||
|
N2
|
||||||
|
R90
|
||||||
|
S5
|
||||||
|
F95
|
||||||
|
W2
|
||||||
|
L90
|
||||||
|
S2
|
||||||
|
L180
|
||||||
|
S3
|
||||||
|
F74
|
||||||
|
L90
|
||||||
|
S2
|
||||||
|
W1
|
||||||
|
S3
|
||||||
|
E1
|
||||||
|
R90
|
||||||
|
S5
|
||||||
|
L180
|
||||||
|
N3
|
||||||
|
L90
|
||||||
|
F52
|
||||||
|
W1
|
||||||
|
L90
|
||||||
|
F79
|
||||||
|
N4
|
||||||
|
F19
|
||||||
|
R180
|
||||||
|
E3
|
||||||
|
R270
|
||||||
|
F52
|
||||||
|
L180
|
||||||
|
E5
|
||||||
|
R270
|
||||||
|
E5
|
||||||
|
N3
|
||||||
|
W4
|
||||||
|
F57
|
||||||
|
S5
|
||||||
|
R180
|
||||||
|
N2
|
||||||
|
L180
|
||||||
|
W4
|
||||||
|
L90
|
||||||
|
W4
|
||||||
|
L90
|
||||||
|
F98
|
||||||
|
S4
|
||||||
|
E3
|
||||||
|
F22
|
||||||
|
N3
|
||||||
|
W5
|
||||||
|
F9
|
||||||
|
E3
|
||||||
|
F25
|
||||||
|
R180
|
||||||
|
F76
|
||||||
|
N1
|
||||||
|
F39
|
||||||
|
R90
|
||||||
|
F81
|
||||||
|
N5
|
||||||
|
F73
|
||||||
|
W2
|
||||||
|
F80
|
||||||
|
N3
|
||||||
|
R90
|
||||||
|
W3
|
||||||
|
F63
|
||||||
|
R270
|
||||||
|
E1
|
||||||
|
R90
|
||||||
|
W2
|
||||||
|
L90
|
||||||
|
S5
|
||||||
|
R90
|
||||||
|
F5
|
||||||
|
N1
|
||||||
|
F98
|
||||||
|
F20
|
||||||
|
E4
|
||||||
|
L90
|
||||||
|
F69
|
||||||
|
S3
|
||||||
|
L180
|
||||||
|
L90
|
||||||
|
F99
|
||||||
|
L90
|
||||||
|
F52
|
||||||
|
L90
|
||||||
|
F29
|
||||||
|
E5
|
||||||
|
N4
|
||||||
|
R180
|
||||||
|
R90
|
||||||
|
E2
|
||||||
|
R90
|
||||||
|
S5
|
||||||
|
E3
|
||||||
|
L270
|
||||||
|
F77
|
||||||
|
E2
|
||||||
|
F8
|
||||||
|
W1
|
||||||
|
N4
|
||||||
|
F38
|
||||||
|
S4
|
||||||
|
W4
|
||||||
|
S3
|
||||||
|
L90
|
||||||
|
E3
|
||||||
|
N4
|
||||||
|
R90
|
||||||
|
F99
|
||||||
|
S3
|
||||||
|
E2
|
||||||
|
F80
|
||||||
|
N5
|
||||||
|
F43
|
||||||
|
N3
|
||||||
|
F99
|
||||||
|
L90
|
||||||
|
S4
|
||||||
|
F66
|
||||||
|
L90
|
||||||
|
L90
|
||||||
|
N2
|
||||||
|
F80
|
||||||
|
N3
|
||||||
|
F86
|
||||||
|
S4
|
||||||
|
R270
|
||||||
|
S3
|
||||||
|
E4
|
||||||
|
F83
|
||||||
|
E2
|
||||||
|
R90
|
||||||
|
F26
|
||||||
|
E3
|
||||||
|
N5
|
||||||
|
E2
|
||||||
|
S4
|
||||||
|
F60
|
||||||
|
E5
|
||||||
|
S3
|
||||||
|
R90
|
||||||
|
W4
|
||||||
|
S5
|
||||||
|
E2
|
||||||
|
R90
|
||||||
|
F67
|
||||||
|
N1
|
||||||
|
E3
|
||||||
|
N2
|
||||||
|
L90
|
||||||
|
E4
|
||||||
|
L90
|
||||||
|
W5
|
||||||
|
E1
|
||||||
|
R90
|
||||||
|
S2
|
||||||
|
W1
|
||||||
|
N1
|
||||||
|
F39
|
||||||
|
F23
|
||||||
|
F64
|
||||||
|
R180
|
||||||
|
F82
|
||||||
|
S4
|
||||||
|
W1
|
||||||
|
F18
|
||||||
|
F57
|
||||||
|
W5
|
||||||
|
F55
|
||||||
|
L90
|
||||||
|
N5
|
||||||
|
L90
|
||||||
|
W2
|
||||||
|
L90
|
||||||
|
F12
|
||||||
|
E4
|
||||||
|
R90
|
||||||
|
W4
|
||||||
|
F37
|
||||||
|
W3
|
||||||
|
F72
|
||||||
|
R90
|
||||||
|
N5
|
||||||
|
R90
|
||||||
|
F95
|
||||||
|
W3
|
||||||
|
L180
|
||||||
|
F6
|
||||||
|
W5
|
||||||
|
F67
|
||||||
|
R90
|
||||||
|
F60
|
||||||
|
R90
|
||||||
|
F77
|
||||||
|
E4
|
||||||
|
R180
|
||||||
|
F81
|
||||||
|
E1
|
||||||
|
F39
|
||||||
|
E2
|
||||||
|
N2
|
||||||
|
F95
|
||||||
|
N5
|
||||||
|
F69
|
||||||
|
L90
|
||||||
|
N3
|
||||||
|
R90
|
||||||
|
S1
|
||||||
|
F11
|
||||||
|
N1
|
||||||
|
L180
|
||||||
|
E2
|
||||||
|
F47
|
||||||
|
W2
|
||||||
|
L90
|
||||||
|
N2
|
||||||
|
W3
|
||||||
|
N2
|
||||||
|
R180
|
||||||
|
F20
|
||||||
|
L90
|
||||||
|
F17
|
||||||
|
S3
|
||||||
|
E4
|
||||||
|
L270
|
||||||
|
W4
|
||||||
|
S2
|
||||||
|
L180
|
||||||
|
W1
|
||||||
|
S1
|
||||||
|
R180
|
||||||
|
N1
|
||||||
|
W4
|
||||||
|
N3
|
||||||
|
L180
|
||||||
|
N4
|
||||||
|
F30
|
||||||
|
E5
|
||||||
|
R90
|
||||||
|
S2
|
||||||
|
F62
|
||||||
|
L90
|
||||||
|
E5
|
||||||
|
F17
|
||||||
|
L90
|
||||||
|
W2
|
||||||
|
R180
|
||||||
|
E5
|
||||||
|
S2
|
||||||
|
F8
|
||||||
|
R180
|
||||||
|
S5
|
||||||
|
F56
|
||||||
|
S1
|
||||||
|
E3
|
||||||
|
F91
|
||||||
|
L90
|
||||||
|
E1
|
||||||
|
R90
|
||||||
|
S3
|
||||||
|
R90
|
||||||
|
E3
|
||||||
|
R90
|
||||||
|
S1
|
||||||
|
E2
|
||||||
|
F56
|
||||||
|
E5
|
||||||
|
L90
|
||||||
|
S4
|
||||||
|
F44
|
||||||
|
S2
|
||||||
|
L90
|
||||||
|
F38
|
||||||
|
E3
|
||||||
|
S5
|
||||||
|
E5
|
||||||
|
S5
|
||||||
|
W3
|
||||||
|
N1
|
||||||
|
R90
|
||||||
|
N5
|
||||||
|
F82
|
||||||
|
W2
|
||||||
|
S3
|
||||||
|
R90
|
||||||
|
E4
|
||||||
|
R90
|
||||||
|
E5
|
||||||
|
E1
|
||||||
|
F64
|
||||||
|
N2
|
||||||
|
L180
|
||||||
|
S1
|
||||||
|
E2
|
||||||
|
N4
|
||||||
|
L90
|
||||||
|
F7
|
||||||
|
R180
|
||||||
|
S3
|
||||||
|
F79
|
||||||
|
W4
|
||||||
|
S2
|
||||||
|
L180
|
||||||
|
E5
|
||||||
|
R180
|
||||||
|
N1
|
||||||
|
L90
|
||||||
|
E2
|
||||||
|
R90
|
||||||
|
F92
|
||||||
|
S4
|
||||||
|
F42
|
||||||
|
E4
|
||||||
|
R180
|
||||||
|
W3
|
||||||
|
R90
|
||||||
|
N3
|
||||||
|
F9
|
||||||
|
L90
|
||||||
|
W5
|
||||||
|
F4
|
||||||
|
R90
|
||||||
|
S4
|
||||||
|
F39
|
||||||
|
N3
|
||||||
|
F78
|
||||||
|
E5
|
||||||
|
N2
|
||||||
|
F79
|
||||||
|
S3
|
||||||
|
R90
|
||||||
|
N2
|
||||||
|
F2
|
||||||
|
S1
|
||||||
|
F94
|
||||||
|
N2
|
||||||
|
W2
|
||||||
|
F17
|
||||||
|
R90
|
||||||
|
W1
|
||||||
|
S3
|
||||||
|
E2
|
||||||
|
F83
|
||||||
|
L180
|
||||||
|
W2
|
||||||
|
N3
|
||||||
|
R270
|
||||||
|
N5
|
||||||
|
W4
|
||||||
|
F40
|
@ -0,0 +1,135 @@
|
|||||||
|
use std::fs::File;
|
||||||
|
use std::io::{BufRead, BufReader};
|
||||||
|
// use crate::Direction::{North, East, West, South};
|
||||||
|
use crate::Command::{N, R, L, W, S, E, F};
|
||||||
|
|
||||||
|
// #[derive(Copy, Clone, Debug)]
|
||||||
|
// enum Direction {
|
||||||
|
// East(i32),
|
||||||
|
// North(i32),
|
||||||
|
// West(i32),
|
||||||
|
// South(i32),
|
||||||
|
// }
|
||||||
|
|
||||||
|
// impl Direction {
|
||||||
|
// fn turn(&self, degrees: i32) -> Direction {
|
||||||
|
// match self {
|
||||||
|
// East(d) => Direction::new((d + degrees + 360) % 360),
|
||||||
|
// North(d) => Direction::new((d + degrees + 360) % 360),
|
||||||
|
// West(d) => Direction::new((d + degrees + 360) % 360),
|
||||||
|
// South(d) => Direction::new((d + degrees + 360) % 360),
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// fn new(degrees: i32) -> Direction {
|
||||||
|
// match degrees {
|
||||||
|
// 0 => East(0),
|
||||||
|
// 90 => North(90),
|
||||||
|
// 180 => West(180),
|
||||||
|
// 270 => South(270),
|
||||||
|
// n => panic!(n)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
#[derive(Copy, Clone, Debug)]
|
||||||
|
struct Ship {
|
||||||
|
// direction: Direction,
|
||||||
|
v: Velocity,
|
||||||
|
x: i32,
|
||||||
|
y: i32,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Ship {
|
||||||
|
fn new() -> Self {
|
||||||
|
Self {
|
||||||
|
// direction: Direction::new(0),
|
||||||
|
v: Velocity::new(),
|
||||||
|
x: 0,
|
||||||
|
y: 0,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Copy, Clone, Debug)]
|
||||||
|
struct Velocity {
|
||||||
|
x: i32,
|
||||||
|
y: i32,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Velocity {
|
||||||
|
fn new() -> Self {
|
||||||
|
Velocity { x: 10, y: 1 }
|
||||||
|
}
|
||||||
|
|
||||||
|
fn rotate(self, angle: i32) -> Velocity {
|
||||||
|
match angle {
|
||||||
|
0 => self,
|
||||||
|
90 => Velocity { x: -self.y, y: self.x },
|
||||||
|
180 => Velocity { x: -self.x, y: -self.y },
|
||||||
|
270 => Velocity { x: self.y, y: -self.x },
|
||||||
|
// -0 => self,
|
||||||
|
-90 => Velocity { x: self.y, y: -self.x },
|
||||||
|
-180 => Velocity { x: -self.x, y: -self.y },
|
||||||
|
-270 => Velocity { x: -self.y, y: self.x },
|
||||||
|
n => panic!(n)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
enum Command {
|
||||||
|
N(i32),
|
||||||
|
S(i32),
|
||||||
|
E(i32),
|
||||||
|
W(i32),
|
||||||
|
L(i32),
|
||||||
|
R(i32),
|
||||||
|
F(i32),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Command {
|
||||||
|
fn parse(command: String) -> Self {
|
||||||
|
match &command[0..1] {
|
||||||
|
"N" => N(command[1..command.len()].parse::<i32>().unwrap()),
|
||||||
|
"S" => S(command[1..command.len()].parse::<i32>().unwrap()),
|
||||||
|
"E" => E(command[1..command.len()].parse::<i32>().unwrap()),
|
||||||
|
"W" => W(command[1..command.len()].parse::<i32>().unwrap()),
|
||||||
|
"L" => L(command[1..command.len()].parse::<i32>().unwrap()),
|
||||||
|
"R" => R(command[1..command.len()].parse::<i32>().unwrap()),
|
||||||
|
"F" => F(command[1..command.len()].parse::<i32>().unwrap()),
|
||||||
|
e => panic!(e.to_string())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn execute(&self, ship: Ship) -> Ship {
|
||||||
|
match self {
|
||||||
|
N(dist) => Ship { v: Velocity { x: ship.v.x, y: ship.v.y + dist }, x: ship.x, y: ship.y },
|
||||||
|
S(dist) => Ship { v: Velocity { x: ship.v.x, y: ship.v.y - dist }, x: ship.x, y: ship.y },
|
||||||
|
E(dist) => Ship { v: Velocity { x: ship.v.x + dist, y: ship.v.y }, x: ship.x, y: ship.y },
|
||||||
|
W(dist) => Ship { v: Velocity { x: ship.v.x - dist, y: ship.v.y }, x: ship.x, y: ship.y },
|
||||||
|
L(angle) => Ship { v: ship.v.rotate(*angle), x: ship.x, y: ship.y },
|
||||||
|
R(angle) => Ship { v: ship.v.rotate(-*angle), x: ship.x, y: ship.y },
|
||||||
|
F(dist) => Ship { v: ship.v, x: ship.x + dist * ship.v.x, y: ship.y + dist * ship.v.y }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let file = File::open("input").unwrap();
|
||||||
|
|
||||||
|
let input_buffer = BufReader::new(&file);
|
||||||
|
let lines = input_buffer.lines();
|
||||||
|
|
||||||
|
let final_position: Ship = lines
|
||||||
|
.map(Result::unwrap)
|
||||||
|
.map(|x: String| x.trim().to_string())
|
||||||
|
.map(Command::parse)
|
||||||
|
.fold(Ship::new(), |ship, command| {
|
||||||
|
println!("{:?}", ship);
|
||||||
|
command.execute(ship)
|
||||||
|
});
|
||||||
|
println!("{:?}", final_position);
|
||||||
|
|
||||||
|
|
||||||
|
println!("{}", final_position.x.abs() + final_position.y.abs())
|
||||||
|
}
|
@ -0,0 +1,5 @@
|
|||||||
|
F10
|
||||||
|
N3
|
||||||
|
F7
|
||||||
|
R90
|
||||||
|
F11
|
Loading…
Reference in New Issue