summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--2024/.vscode/settings.json2
-rw-r--r--2025/c4
-rw-r--r--2025/ca.rs80
-rw-r--r--2025/cb.rs0
-rw-r--r--2025/joltage0
-rw-r--r--2025/joltage.rs44
-rw-r--r--2025/lib.rs2
-rw-r--r--2025/main.rs5
8 files changed, 135 insertions, 2 deletions
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<Joltage>, // optimization: could be fixzed size slice
+}
+
+impl JoltageBank {
+ fn new(inner: Vec<Joltage>) -> 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<Joltage> = "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
--- /dev/null
+++ b/2025/cb.rs
diff --git a/2025/joltage b/2025/joltage
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/2025/joltage
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<Self, String> {
+ 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<Joltage> 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();
}