From 0b078910c52a7fb4f5eb17193f7f2f720f7a6cd7 Mon Sep 17 00:00:00 2001 From: nekineki Date: Wed, 25 Dec 2024 06:17:38 +0100 Subject: day25 part1 --- 2024/day25.rs | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 2024/day25.rs (limited to '2024/day25.rs') diff --git a/2024/day25.rs b/2024/day25.rs new file mode 100644 index 0000000..507c53d --- /dev/null +++ b/2024/day25.rs @@ -0,0 +1,63 @@ +#![allow(dead_code)] +#![allow(unused_variables)] +#![allow(unused_mut)] +use std::env; +use std::fs::File; +use std::io::Read; + +fn main() { + let args: Vec = env::args().collect(); + let filename = if args.len() == 1 { + "in/".to_owned() + args[0].split('/').last().unwrap() + ".pzl" + } else { + args[1].clone() + }; + let mut f = File::open(filename).expect("cannot open file"); + let mut content = String::new(); + f.read_to_string(&mut content).expect("cannot read file"); + let paras = content.trim_end().split("\n\n"); + + let mut locks: Vec> = Vec::new(); + let mut keys: Vec> = Vec::new(); + + for para in paras { + let mut para = para.split("\n"); + let line = para.next().unwrap(); + + if line == "#####" { + let mut key = vec![0; 5]; + for line in para { + for (i, c) in line.chars().enumerate() { + if c == '#' { + key[i] += 1; + } + } + } + keys.push(key) + } else { + let mut lock = vec![-1; 5]; + for line in para { + for (i, c) in line.chars().enumerate() { + if c == '#' { + lock[i] += 1; + } + } + } + locks.push(lock) + } + } + //println!("{:?}", locks); + //println!("{:?}", keys); + + let mut res1 = 0; + for l in locks.clone() { + for k in keys.clone() { + if l.iter().zip(k.iter()).map(|(a, b)| a + b).all(|x| x <= 5) { + res1 += 1; + } + } + } + + println!("res1: {}", res1); + assert_eq!(res1, 2993); +} -- cgit v1.2.3