Skip to content

Commit f84dd15

Browse files
2017, day 25
1 parent 836f330 commit f84dd15

File tree

3 files changed

+80
-0
lines changed

3 files changed

+80
-0
lines changed

src/main.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ fn main() {
9393
(2017, 22) => year_2017::day22::run(inputs::read(year, day)),
9494
(2017, 23) => year_2017::day23::run(inputs::read(year, day)),
9595
(2017, 24) => year_2017::day24::run(inputs::read(year, day)),
96+
(2017, 25) => year_2017::day25::run(),
9697

9798
// Other
9899
(_, _) => panic!("Not implemented :("),

src/year_2017/day25.rs

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
use std::collections::HashMap;
2+
3+
pub fn run() {
4+
// For the last day, it was easier to directly convert the input into cod else
5+
// multi-selection to the rescue!
6+
let mut pos = 0;
7+
let mut state = 'A';
8+
let mut tape: HashMap<i64, i64> = HashMap::new();
9+
10+
for _ in 0..12629077 {
11+
let t = tape.entry(pos).or_insert(0);
12+
if state == 'A' {
13+
if *t == 0 {
14+
*t = 1;
15+
pos += 1;
16+
state = 'B';
17+
} else {
18+
*t = 0;
19+
pos -= 1;
20+
state = 'B';
21+
}
22+
} else if state == 'B' {
23+
if *t == 0 {
24+
*t = 0;
25+
pos += 1;
26+
state = 'C';
27+
} else {
28+
*t = 1;
29+
pos -= 1;
30+
state = 'B';
31+
}
32+
} else if state == 'C' {
33+
if *t == 0 {
34+
*t = 1;
35+
pos += 1;
36+
state = 'D';
37+
} else {
38+
*t = 0;
39+
pos -= 1;
40+
state = 'A';
41+
}
42+
} else if state == 'D' {
43+
if *t == 0 {
44+
*t = 1;
45+
pos -= 1;
46+
state = 'E';
47+
} else {
48+
*t = 1;
49+
pos -= 1;
50+
state = 'F';
51+
}
52+
} else if state == 'E' {
53+
if *t == 0 {
54+
*t = 1;
55+
pos -= 1;
56+
state = 'A';
57+
} else {
58+
*t = 0;
59+
pos -= 1;
60+
state = 'D';
61+
}
62+
} else if state == 'F' {
63+
if *t == 0 {
64+
*t = 1;
65+
pos += 1;
66+
state = 'A';
67+
} else {
68+
*t = 1;
69+
pos -= 1;
70+
state = 'E';
71+
}
72+
}
73+
}
74+
75+
let sum: i64 = tape.values().sum();
76+
println!("part 1: {}", sum);
77+
assert_eq!(sum, 3745);
78+
}

src/year_2017/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,4 @@ pub mod day21;
2222
pub mod day22;
2323
pub mod day23;
2424
pub mod day24;
25+
pub mod day25;

0 commit comments

Comments
 (0)