Skip to content

Commit 49690ad

Browse files
committed
Add day 15
1 parent b73dccd commit 49690ad

File tree

5 files changed

+79
-0
lines changed

5 files changed

+79
-0
lines changed

Day15_input.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
2,0,6,12,1,3

day15a/Cargo.toml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
[package]
2+
name = "day15a"
3+
version = "0.1.0"
4+
authors = ["Linus Kardell <[email protected]>"]
5+
edition = "2018"
6+
7+
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
8+
9+
[dependencies]

day15a/src/main.rs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
use std::io;
2+
3+
fn main() {
4+
let mut input = String::new();
5+
io::stdin().read_line(&mut input).unwrap();
6+
7+
const ITERATIONS: usize = 2020;
8+
9+
let numbers: Vec<_> = input.trim().split(',').map(|x| x.parse().unwrap()).collect();
10+
let (&last_number, rest) = numbers.split_last().unwrap();
11+
let mut number_timestamps = vec![None; ITERATIONS];
12+
for (&i, n) in rest.iter().zip(1..) {
13+
number_timestamps[i] = Some(n);
14+
}
15+
16+
let (_, last_number) = (numbers.len()..ITERATIONS).fold(
17+
(number_timestamps, last_number),
18+
|(mut number_timestamps, last_number), curr_time| {
19+
let new_number = if let Some(last_time) = number_timestamps[last_number] {
20+
curr_time - last_time
21+
} else {
22+
0
23+
};
24+
number_timestamps[last_number] = Some(curr_time);
25+
(number_timestamps, new_number)
26+
},
27+
);
28+
29+
println!("{}", last_number);
30+
}

day15b/Cargo.toml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
[package]
2+
name = "day15b"
3+
version = "0.1.0"
4+
authors = ["Linus Kardell <[email protected]>"]
5+
edition = "2018"
6+
7+
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
8+
9+
[dependencies]

day15b/src/main.rs

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
use std::io;
2+
3+
fn main() {
4+
let mut input = String::new();
5+
io::stdin().read_line(&mut input).unwrap();
6+
7+
const ITERATIONS: usize = 30000000;
8+
9+
let numbers: Vec<_> = input.trim().split(',').map(|x| x.parse().unwrap()).collect();
10+
let (&last_number, rest) = numbers.split_last().unwrap();
11+
let mut number_timestamps = vec![None; ITERATIONS];
12+
for (&i, n) in rest.iter().zip(1..) {
13+
number_timestamps[i] = Some(n);
14+
}
15+
16+
let (_, last_number) = (numbers.len()..ITERATIONS).fold(
17+
(number_timestamps, last_number),
18+
|(mut number_timestamps, last_number), curr_time| {
19+
let new_number = if let Some(last_time) = number_timestamps[last_number] {
20+
curr_time - last_time
21+
} else {
22+
0
23+
};
24+
number_timestamps[last_number] = Some(curr_time);
25+
(number_timestamps, new_number)
26+
},
27+
);
28+
29+
println!("{}", last_number);
30+
}

0 commit comments

Comments
 (0)