Day 2 aoc in progress

This commit is contained in:
Philippe Zwietering
2026-01-09 17:00:16 +01:00
parent 4ad2ec5240
commit 121a9a02cb
4 changed files with 131 additions and 0 deletions

View File

@@ -0,0 +1,123 @@
use std::cmp::{max, min};
fn parse_input(input: &str) -> Vec<(i64, i64)> {
let line = input.lines().next().unwrap();
line.split(",")
.map(|id_range| {
let mut id_range_iter = id_range.split("-");
(
id_range_iter.next().unwrap().parse::<i64>().unwrap(),
id_range_iter.next().unwrap().parse::<i64>().unwrap(),
)
})
.collect()
}
fn solve_1(input: &str) -> i64 {
let ranges = parse_input(input);
let mut result = 0;
for range in ranges {
let min_length = range.0.to_string().len();
let max_length = range.1.to_string().len();
for range_length in min_length..=max_length {
if range_length % 2 == 0 {
let mut range_start = max(range.0, 10_i64.pow(range_length as u32 - 1));
let mut range_end = min(range.1, 10_i64.pow(range_length as u32) - 1);
let start_halves = range_start.to_string();
let start_halves = start_halves.split_at(range_length / 2);
let (start_first_half, start_second_half) = (
start_halves.0.parse::<i64>().unwrap(),
start_halves.1.parse::<i64>().unwrap(),
);
if start_first_half < start_second_half {
range_start = start_first_half + 1;
} else {
range_start = start_first_half;
}
let end_halves = range_end.to_string();
let end_halves = end_halves.split_at(range_length / 2);
let (end_first_half, end_second_half) = (
end_halves.0.parse::<i64>().unwrap(),
end_halves.1.parse::<i64>().unwrap(),
);
if end_first_half > end_second_half {
range_end = end_first_half - 1;
} else {
range_end = end_first_half;
}
for x in range_start..=range_end {
result += x * 10_i64.pow(range_length as u32 / 2) + x;
}
}
}
}
result
}
fn get_factors(n: i64) -> Vec<i64> {
// Naive implementation, not counting n itself, but counting 1 always
}
fn solve_2(input: &str) -> i64 {
let ranges = parse_input(input);
let mut result = 0;
for range in ranges {
let min_length = range.0.to_string().len();
let max_length = range.1.to_string().len();
for range_length in min_length..=max_length {
let range_start = max(range.0, 10_i64.pow(range_length as u32 - 1));
let range_end = min(range.1, 10_i64.pow(range_length as u32) - 1);
let factors = get_factors(range_length);
for factor in factors {
}
}
}
result
}
fn main() {
println!("Hello, this is Patrick!");
let input = include_str!("../input.txt");
let result_1 = solve_1(input);
println!("Sum of false ids: {}", result_1);
let result_2 = solve_2(input);
println!("{}", result_2);
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_1() {
let test_input = include_str!("../test.txt");
assert_eq!(solve_1(test_input), 1227775554);
}
#[test]
fn test_2() {
let test_input = include_str!("../test.txt");
assert_eq!(solve_2(test_input), 4174379265);
}
}