Skip to content

Commit c08e59a

Browse files
committed
Add day 13
1 parent 3ec228d commit c08e59a

File tree

5 files changed

+72
-0
lines changed

5 files changed

+72
-0
lines changed

Day13_input.txt

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
1005526
2+
37,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,41,x,x,x,x,x,x,x,x,x,587,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,13,19,x,x,x,23,x,x,x,x,x,29,x,733,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,17

day13a/Cargo.toml

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
[package]
2+
name = "day13a"
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]

day13a/src/main.rs

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
use std::io;
2+
3+
fn main() {
4+
let mut input = String::new();
5+
io::stdin().read_line(&mut input).unwrap();
6+
let curr_time: i32 = input.trim().parse().unwrap();
7+
8+
input.clear();
9+
io::stdin().read_line(&mut input).unwrap();
10+
let (id, remain) = input.trim().split(",").filter(|&x| x != "x").map(|x| {
11+
let period: i32 = x.parse().unwrap();
12+
(period, (-curr_time).rem_euclid(period))
13+
}).min_by_key(|&(_, remain)| remain).unwrap();
14+
15+
println!("{}", id * remain);
16+
}

day13b/Cargo.toml

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
[package]
2+
name = "day13b"
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]

day13b/src/main.rs

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
use std::io;
2+
3+
fn gcd(a: u64, b: u64) -> u64 {
4+
if b == 0 {
5+
a
6+
} else {
7+
gcd(b, a % b)
8+
}
9+
}
10+
11+
fn lcm(a: u64, b: u64) -> u64 {
12+
a * b / gcd(a, b)
13+
}
14+
15+
fn main() {
16+
let mut input = String::new();
17+
io::stdin().read_line(&mut input).unwrap();
18+
19+
input.clear();
20+
io::stdin().read_line(&mut input).unwrap();
21+
22+
let (_, offset) = input
23+
.trim()
24+
.split(",")
25+
.enumerate()
26+
.filter(|&(_, x)| x != "x")
27+
.fold((1, 0), |(old_period, offset), (n, x)| {
28+
let new_period = x.parse().unwrap();
29+
(
30+
lcm(old_period, new_period),
31+
(0..).map(|y| old_period * y + offset).find(|y| (y + n as u64) % new_period == 0).unwrap(),
32+
)
33+
});
34+
35+
println!("{}", offset);
36+
}

0 commit comments

Comments
 (0)