adventofcode

git clone https://git.ce9e.org/adventofcode.git

commit
55822b915dae0838a0e2d40c53e9f4cbe48ecaa4
parent
5427d198e5119c3279ef48950b13c31ef01337d9
Author
Tobias Bengfort <tobias.bengfort@posteo.de>
Date
2023-12-07 08:12
2023-12-06

Diffstat

A 2023/06/input.txt 2 ++
A 2023/06/solution.rs 44 ++++++++++++++++++++++++++++++++++++++++++++
A 2023/06/test.txt 2 ++

3 files changed, 48 insertions, 0 deletions


diff --git a/2023/06/input.txt b/2023/06/input.txt

@@ -0,0 +1,2 @@
   -1     1 Time:        51     92     68     90
   -1     2 Distance:   222   2031   1126   1225

diff --git a/2023/06/solution.rs b/2023/06/solution.rs

@@ -0,0 +1,44 @@
   -1     1 #[path = "../lib.rs"]
   -1     2 mod lib;
   -1     3 
   -1     4 fn parse_line(line: &str) -> Vec<u64> {
   -1     5     return line
   -1     6         .split_whitespace()
   -1     7         .skip(1)
   -1     8         .map(|s| s.parse().unwrap())
   -1     9         .collect();
   -1    10 }
   -1    11 
   -1    12 fn count_games(times: &Vec<u64>, dists: &Vec<u64>) -> u64 {
   -1    13     let mut results = vec![];
   -1    14 
   -1    15     for i in 0..times.len() {
   -1    16         // how many integer x can satisfy
   -1    17         // (times[i] - x) * x > dists[i]
   -1    18         let p = (times[i] as f64) / 2.0;
   -1    19         let q = p * p - (dists[i] as f64);
   -1    20         assert!(q >= 0.0);
   -1    21         let q2 = q.sqrt();
   -1    22         assert!(q2 < p);
   -1    23         let x1 = (p - q2).floor() as u64;
   -1    24         let x2 = (p + q2).ceil() as u64;
   -1    25         results.push(x2 - x1 - 1);
   -1    26     }
   -1    27 
   -1    28     return results.iter().product();
   -1    29 }
   -1    30 
   -1    31 fn main() {
   -1    32     let mut lines = lib::iter_input();
   -1    33     let line1 = lines.next().unwrap();
   -1    34     let line2 = lines.next().unwrap();
   -1    35 
   -1    36     let times1 = parse_line(&line1);
   -1    37     let dists1 = parse_line(&line2);
   -1    38 
   -1    39     let times2 = parse_line(&line1.replace(" ", "").replace(":", ": "));
   -1    40     let dists2 = parse_line(&line2.replace(" ", "").replace(":", ": "));
   -1    41 
   -1    42     println!("part2: {}", count_games(&times1, &dists1));
   -1    43     println!("part2: {}", count_games(&times2, &dists2));
   -1    44 }

diff --git a/2023/06/test.txt b/2023/06/test.txt

@@ -0,0 +1,2 @@
   -1     1 Time:      7  15   30
   -1     2 Distance:  9  40  200