From c8780d06a13dd08bccc1ce29e0b7cd60ff65f259 Mon Sep 17 00:00:00 2001 From: littleblack111 Date: Wed, 3 Dec 2025 22:48:55 +0800 Subject: new: day 3 --- 2024/.vscode/settings.json | 2 +- 2025/c | 4 +++ 2025/ca.rs | 80 ++++++++++++++++++++++++++++++++++++++++++++++ 2025/cb.rs | 0 2025/joltage | 0 2025/joltage.rs | 44 +++++++++++++++++++++++++ 2025/lib.rs | 2 ++ 2025/main.rs | 5 ++- 8 files changed, 135 insertions(+), 2 deletions(-) create mode 100644 2025/c create mode 100644 2025/ca.rs create mode 100644 2025/cb.rs create mode 100644 2025/joltage create mode 100644 2025/joltage.rs diff --git a/2024/.vscode/settings.json b/2024/.vscode/settings.json index 51e1af4..1ca7676 100644 --- a/2024/.vscode/settings.json +++ b/2024/.vscode/settings.json @@ -72,4 +72,4 @@ "queue": "cpp", "stack": "cpp" } -} \ No newline at end of file +} diff --git a/2025/c b/2025/c new file mode 100644 index 0000000..7255fca --- /dev/null +++ b/2025/c @@ -0,0 +1,4 @@ +987654321111111 +811111111111119 +234234234234278 +818181911112111 diff --git a/2025/ca.rs b/2025/ca.rs new file mode 100644 index 0000000..70c395f --- /dev/null +++ b/2025/ca.rs @@ -0,0 +1,80 @@ +use aoc::{fetch::fetch, joltage::Joltage, read::read}; + +struct JoltageBank { + inner: Vec, // optimization: could be fixzed size slice +} + +impl JoltageBank { + fn new(inner: Vec) -> Self { + Self { + inner, + } + } + + fn get_biggest_two(&mut self) -> usize { + let mut res = 0; + // Try all pairs of positions (i, j) where i < j + // The resulting number is formed by digit at i followed by digit at j + for i in 0..self + .inner + .len() + { + for j in (i + 1) + ..self + .inner + .len() + { + let max1 = *self.inner[i] as usize; + let max2 = *self.inner[j] as usize; + let value = max1 * 10 + max2; + if value > res { + res = value; + } + } + } + res + } +} + +pub fn main() { + let input = fetch( + 3, '\n', + ); + // let vec: Vec = "987654321111111" + // .chars() + // .map( + // |c| { + // Joltage::parse( + // c.to_digit(10) + // .unwrap() as u8, + // ) + // .unwrap() + // }, + // ) + // .collect(); + // println!( + // "{:#?}", + // JoltageBank::new(vec).get_max(2) + // ); + // let input = read( + // "c", '\n', + // ); + let mut res = 0; + for i in input { + if i.is_empty() { + break; + } + let mut vec = Vec::new(); + for c in i.chars() { + vec.push( + Joltage::parse( + c.to_digit(10) + .unwrap() as u8, + ) + .unwrap(), + ); + } + res += JoltageBank::new(vec).get_biggest_two(); + } + println!("{res}"); +} diff --git a/2025/cb.rs b/2025/cb.rs new file mode 100644 index 0000000..e69de29 diff --git a/2025/joltage b/2025/joltage new file mode 100644 index 0000000..e69de29 diff --git a/2025/joltage.rs b/2025/joltage.rs new file mode 100644 index 0000000..5cb8ede --- /dev/null +++ b/2025/joltage.rs @@ -0,0 +1,44 @@ +use std::ops::Deref; + +#[derive(Ord, PartialOrd, PartialEq, Eq, Debug)] +pub struct Joltage { + inner: u8, +} + +impl Joltage { + pub fn parse(value: u8) -> Result { + if value > 10 { + return Err( + format!( + "Joltage value {} is out of range (0-10)", + value + ), + ); + } else if value == 0 { + return Err("Joltage value cannot be zero".to_string()); + } + Ok( + Joltage { + inner: value, + }, + ) + } + + fn value(&self) -> u8 { + self.inner + } +} + +impl Deref for Joltage { + type Target = u8; + + fn deref(&self) -> &Self::Target { + &self.inner + } +} + +impl From for u8 { + fn from(value: Joltage) -> Self { + value.inner + } +} diff --git a/2025/lib.rs b/2025/lib.rs index 060f29a..274b2ae 100644 --- a/2025/lib.rs +++ b/2025/lib.rs @@ -2,3 +2,5 @@ pub mod fetch; pub mod read; + +pub mod joltage; diff --git a/2025/main.rs b/2025/main.rs index 6f628bf..34f5246 100644 --- a/2025/main.rs +++ b/2025/main.rs @@ -4,9 +4,12 @@ pub mod ab; pub mod ba; pub mod bb; +pub mod ca; +pub mod cb; + fn main() { // aa::main(); // ab::main(); // ba::main(); - bb::main(); + ca::main(); } -- cgit v1.2.3