-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path12.rs
More file actions
66 lines (62 loc) · 7.68 KB
/
Copy path12.rs
File metadata and controls
66 lines (62 loc) · 7.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
static INPUT: [(char,i64); 773] = [('W',5),('F',63),('S',1),('L',90),('F',89),('W',4),('F',45),('W',4),('F',71),('R',90),('S',4),('F',16),('E',5),('R',90),('S',5),('F',94),('S',4),('W',5),('F',66),('N',3),('W',1),('R',90),('F',13),('R',180),('W',5),('F',58),('E',2),('R',270),('F',72),('L',90),('S',2),('L',90),('N',3),('W',5),('F',90),('S',2),('F',86),('L',90),('F',72),('N',4),('W',5),('N',1),('W',3),('N',2),('E',1),('S',5),('R',90),('F',11),('W',2),('R',90),('F',58),('S',5),('F',64),('R',180),('E',4),('N',5),('F',53),('R',90),('W',5),('N',3),('F',39),('S',3),('R',180),('N',2),('E',4),('L',90),('W',1),('R',90),('S',1),('R',90),('F',40),('E',1),('F',95),('W',2),('R',90),('S',5),('F',41),('L',270),('N',4),('L',90),('E',3),('S',2),('E',5),('L',180),('F',38),('S',5),('E',3),('L',90),('W',3),('S',4),('L',180),('S',5),('F',33),('W',2),('R',90),('R',90),('F',95),('E',2),('F',96),('R',90),('F',15),('L',90),('N',2),('R',90),('N',1),('F',69),('R',180),('N',5),('L',90),('F',53),('L',180),('W',1),('L',90),('S',1),('L',180),('S',2),('N',4),('N',2),('F',51),('W',1),('F',17),('W',1),('R',180),('W',5),('S',4),('R',180),('F',87),('N',2),('W',3),('F',26),('L',90),('E',4),('N',1),('F',62),('N',5),('R',90),('F',53),('N',4),('R',90),('N',3),('L',180),('W',3),('N',4),('R',90),('S',1),('W',2),('L',90),('W',2),('S',2),('R',90),('W',1),('F',50),('R',180),('F',84),('L',90),('F',12),('R',180),('F',26),('W',5),('N',3),('R',90),('S',1),('F',3),('N',4),('E',3),('R',180),('W',1),('N',5),('W',1),('W',4),('F',89),('L',270),('W',4),('L',180),('N',4),('F',83),('W',2),('F',45),('L',90),('F',79),('W',2),('R',90),('W',1),('N',4),('L',90),('W',1),('N',1),('F',56),('N',5),('W',2),('N',3),('L',90),('W',3),('N',5),('F',49),('F',4),('S',2),('F',93),('N',1),('R',90),('N',3),('W',3),('F',29),('S',1),('N',5),('F',54),('N',5),('R',180),('F',92),('E',1),('L',90),('W',3),('L',270),('E',4),('L',180),('S',5),('E',2),('F',84),('L',180),('N',4),('F',14),('F',60),('N',2),('F',98),('L',270),('F',61),('N',3),('F',39),('E',5),('L',180),('W',4),('N',2),('R',90),('F',71),('S',4),('L',90),('L',90),('S',1),('F',15),('L',90),('E',2),('F',73),('N',4),('F',92),('S',5),('W',2),('N',4),('R',90),('S',1),('F',29),('E',4),('S',4),('F',9),('E',4),('F',10),('W',3),('S',1),('F',55),('S',5),('F',88),('F',94),('L',180),('F',99),('N',2),('W',4),('F',87),('E',5),('S',1),('L',180),('S',1),('L',90),('W',3),('N',1),('W',5),('F',50),('W',2),('S',2),('F',61),('N',1),('W',3),('R',90),('F',7),('W',1),('L',90),('E',2),('R',90),('L',90),('W',5),('S',4),('R',90),('S',1),('F',70),('W',3),('F',72),('S',5),('L',90),('E',5),('F',87),('L',90),('F',64),('S',2),('F',35),('L',90),('N',5),('R',90),('N',5),('W',4),('L',90),('F',41),('L',90),('E',4),('N',2),('F',84),('R',90),('F',67),('S',4),('E',3),('F',70),('E',5),('L',90),('F',98),('N',4),('W',2),('L',90),('E',2),('F',31),('N',3),('W',2),('F',80),('S',5),('F',43),('S',1),('E',2),('L',90),('F',61),('E',2),('L',90),('F',56),('L',90),('N',4),('W',5),('L',180),('W',2),('F',19),('N',4),('F',90),('N',4),('W',2),('R',90),('F',27),('S',5),('F',3),('N',2),('R',90),('W',1),('S',1),('F',48),('S',3),('F',61),('R',270),('F',76),('S',4),('L',180),('N',4),('W',1),('F',34),('E',1),('L',90),('F',62),('W',1),('F',37),('S',1),('L',90),('N',5),('F',25),('N',4),('E',1),('L',90),('F',98),('N',4),('E',5),('R',90),('F',19),('R',180),('E',4),('F',74),('E',4),('N',3),('W',1),('F',86),('W',5),('F',85),('E',1),('E',2),('S',2),('F',79),('R',90),('W',5),('S',3),('L',90),('S',2),('F',43),('L',180),('E',4),('F',64),('L',180),('N',1),('W',1),('S',4),('E',3),('L',180),('N',2),('W',4),('R',90),('F',63),('L',90),('S',5),('W',5),('F',27),('L',90),('F',38),('L',90),('W',1),('F',18),('N',5),('S',2),('E',5),('F',54),('E',2),('F',68),('F',40),('S',5),('F',7),('N',3),('E',1),('L',90),('N',2),('W',3),('F',22),('L',90),('W',3),('R',90),('E',2),('R',180),('N',1),('L',90),('F',36),('E',5),('L',90),('E',4),('N',5),('F',62),('R',90),('E',4),('R',180),('F',70),('N',4),('F',56),('L',90),('F',96),('L',90),('N',4),('F',70),('W',3),('L',90),('F',32),('L',90),('W',2),('F',36),('S',1),('F',85),('R',90),('S',3),('R',90),('F',77),('S',2),('W',3),('R',90),('N',2),('W',5),('L',180),('F',25),('R',180),('S',2),('E',1),('L',180),('E',2),('S',1),('F',59),('N',1),('F',57),('R',90),('W',5),('L',90),('S',1),('R',90),('W',1),('R',180),('W',1),('N',2),('W',4),('F',8),('S',2),('F',40),('R',90),('F',43),('S',3),('S',1),('W',2),('F',82),('W',1),('S',4),('L',180),('F',51),('L',180),('N',2),('F',83),('L',90),('E',1),('N',5),('F',11),('W',1),('F',2),('S',3),('L',90),('W',1),('S',2),('F',48),('L',90),('E',5),('L',180),('F',25),('W',2),('F',78),('F',78),('E',1),('S',3),('W',4),('N',4),('L',90),('F',73),('S',4),('F',91),('R',180),('F',21),('N',4),('F',9),('W',1),('N',4),('L',90),('N',4),('L',180),('N',5),('E',5),('L',90),('S',3),('R',90),('W',3),('R',90),('F',65),('E',5),('E',1),('F',10),('L',270),('F',71),('E',2),('F',10),('L',180),('W',4),('S',2),('W',2),('L',90),('F',22),('W',4),('F',41),('N',4),('E',5),('R',90),('N',1),('W',4),('F',34),('R',270),('E',5),('F',77),('L',270),('R',180),('E',5),('N',3),('R',180),('E',4),('R',90),('E',2),('F',25),('F',34),('S',3),('E',4),('N',5),('W',5),('L',90),('L',90),('F',78),('L',90),('S',1),('W',4),('F',32),('E',5),('F',54),('E',2),('F',61),('E',3),('N',4),('F',60),('N',1),('R',90),('F',4),('N',1),('R',90),('E',1),('L',180),('R',90),('F',4),('E',3),('F',4),('L',90),('S',4),('W',1),('L',90),('E',1),('L',90),('S',5),('F',30),('R',90),('F',34),('N',4),('F',95),('R',180),('F',59),('R',90),('F',47),('E',4),('F',48),('L',90),('F',59),('W',1),('S',4),('F',12),('R',90),('F',59),('S',1),('F',53),('N',5),('F',15),('L',90),('F',47),('N',3),('E',2),('F',77),('R',180),('F',59),('W',3),('S',3),('F',40),('E',4),('L',90),('S',5),('F',19),('S',1),('W',5),('N',1),('L',90),('S',2),('E',1),('F',17),('L',90),('E',1),('F',93),('N',5),('F',95),('W',1),('L',90),('F',5),('E',2),('L',270),('N',3),('L',90),('E',4),('W',2),('W',2),('F',30),('W',3),('L',90),('F',87),('R',270),('N',5),('F',51),('R',270),('F',97),('E',4),('S',5),('W',1),('R',90),('W',4),('F',84),('E',5),('R',90),('W',4),('N',1),('R',90),('F',67),('L',90),('W',2),('R',90),('W',1),('S',5),('F',17),('F',83),('E',3),('L',90),('N',1),('W',3),('L',90),('F',50),('E',1),('F',70),('S',5),('F',35),('R',270),('N',4),('W',3),('S',2),('L',90),('S',1),('E',1),('L',90),('S',1),('R',180),('F',32),('W',5),('N',5),('W',3),('R',90),('S',4),('F',51),('R',180),('F',89),('S',4),('L',90),('F',14),('S',4),('L',180),('W',2),('R',90),('F',25),('W',5),('F',44),('W',3),('L',180),('F',27),('W',3),('L',180),('L',180),('F',52),('N',3),('W',1),('N',1),('F',4),('E',2),('R',90),('F',52),('L',90),('F',94),('L',90),('F',13)];
fn part_one() -> i64 {
let (mut x, mut y, mut r) = (0, 0, 90);
for (d, n) in &INPUT {
match d {
'N' => y += n,
'S' => y -= n,
'E' => x += n,
'W' => x -= n,
'L' => r -= n,
'R' => r += n,
'F' => match r.rem_euclid(360) {
0 => y += n,
90 => x += n,
180 => y -= n,
270 => x -= n,
_ => unreachable!(),
}
_ => unreachable!(),
}
}
x.abs() + y.abs()
}
fn rot(x: i64, y: i64, d: i64) -> (i64,i64) {
match d {
90 => (-y, x),
180 => (-x, -y),
270 => ( y, -x),
_ => unreachable!(),
}
}
fn part_two() -> i64 {
let (mut x, mut y) = (10, 1); // waypoint
let (mut i, mut j) = (0, 0); // ship
for &(d,n) in &INPUT {
match d {
'N' => y += n,
'S' => y -= n,
'E' => x += n,
'W' => x -= n,
'L' => {
let (a,b) = rot(x, y, n);
x = a;
y = b;
}
'R' => {
let (a,b) = rot(x, y, 360 - n);
x = a;
y = b;
}
'F' => {
i += x * n;
j += y * n;
}
_ => unreachable!(),
}
}
i.abs() + j.abs()
}
aoc2020::main! {
(part_one(), part_two())
}