diff options
| author | mhsn <mail@mhsn.net> | 2026-03-18 21:48:13 +0000 |
|---|---|---|
| committer | mhsn <mail@mhsn.net> | 2026-03-18 21:48:13 +0000 |
| commit | 86bac31392a76da84817eec020d2b84d099b3cc1 (patch) | |
| tree | e2ee52db59b86b914d5b4bcceb19c9b5d899fff4 /2024/03/rust/src/main.rs | |
| parent | 62fe361fc42dea75deaf7ac31c0ba6ba80e26a9c (diff) | |
| download | puzzles-86bac31392a76da84817eec020d2b84d099b3cc1.tar.gz puzzles-86bac31392a76da84817eec020d2b84d099b3cc1.zip | |
Diffstat (limited to '2024/03/rust/src/main.rs')
| -rw-r--r-- | 2024/03/rust/src/main.rs | 68 |
1 files changed, 0 insertions, 68 deletions
diff --git a/2024/03/rust/src/main.rs b/2024/03/rust/src/main.rs deleted file mode 100644 index b268463..0000000 --- a/2024/03/rust/src/main.rs +++ /dev/null @@ -1,68 +0,0 @@ -use std::io::{self, Read}; - -#[derive(Debug)] -enum Instruction { - Do, - Dont, - Mul(u64, u64), -} - -impl From<&Instruction> for u64 { - fn from(val: &Instruction) -> Self { - match val { - Instruction::Mul(x, y) => x * y, - _ => 0, - } - } -} - -fn main() -> io::Result<()> { - let mut program = String::new(); - io::stdin().read_to_string(&mut program)?; - - let instrs = (0..program.len()) - .filter_map(|idx| { - let next = &program[idx..]; - if next.starts_with("do()") { - Some(Instruction::Do) - } else if next.starts_with("don't()") { - Some(Instruction::Dont) - } else if next.starts_with("mul(") { - let mut first = 0; - let mut curr = 0; - - for ch in next.bytes().skip(4) { - match (ch, curr) { - ((b'0'..=b'9'), _) => curr = curr * 10 + (ch - b'0') as u64, - (_, 0) => return None, - (b',', _) => { - first = curr; - curr = 0; - } - (b')', _) => { - return Some(Instruction::Mul(first, curr)); - } - _ => return None, - }; - } - None - } else { - None - } - }) - .collect::<Vec<_>>(); - - let silver: u64 = instrs.iter().map(u64::from).sum(); - let (gold, _) = instrs - .iter() - .fold((0 as u64, true), |(acc, on), instr| match (instr, on) { - (Instruction::Do, _) => (acc, true), - (Instruction::Dont, _) => (acc, false), - (Instruction::Mul(_, _), true) => (acc + u64::from(instr), true), - _ => (acc, on), - }); - println!("silver: {silver}"); - println!("gold: {gold}"); - - return Ok(()); -} |
