From 62283ad92238c33e4ac1707b3467dfe0b9ebf79a Mon Sep 17 00:00:00 2001 From: nekineki Date: Wed, 13 Dec 2023 19:52:27 +0100 Subject: day11 part1 --- 2023/day11.rs | 96 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 2023/day11.rs (limited to '2023/day11.rs') diff --git a/2023/day11.rs b/2023/day11.rs new file mode 100644 index 0000000..f78f45d --- /dev/null +++ b/2023/day11.rs @@ -0,0 +1,96 @@ +#![allow(dead_code)] +#![allow(unused_variables)] +#![allow(unused_mut)] +use std::fs::File; +use std::io::Read; + +fn transpose(original: Vec>) -> Vec> { + assert!(!original.is_empty()); + let mut transposed = (0..original[0].len()).map(|_| vec![]).collect::>(); + + for original_row in original { + for (item, transposed_row) in original_row.into_iter().zip(&mut transposed) { + transposed_row.push(item); + } + } + transposed +} + +fn insert_rows(m: Vec>) -> Vec> { + let mut out = Vec::new(); + + for r in m { + if r.iter().any(|x| *x) { + out.push(r); + } else { + out.push(r.clone()); + out.push(r); + } + } + out +} + +fn print_m(m: &Vec>) { + for i in 0..m.len() { + for j in 0..m[0].len() { + if m[i][j] { + print!("#"); + } else { + print!("."); + } + } + println!(); + } + println!(); +} + +fn main() { + // let filename = "in/day11.ref"; + let filename = "in/day11.pzl"; + + 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 lines = content.trim_end().split('\n'); + + let mut m: Vec> = Vec::new(); + for line in lines { + let mut r: Vec = Vec::new(); + for c in line.chars() { + r.push(if c == '#' { true } else { false }); + } + m.push(r); + } + + m = insert_rows(m); + + m = transpose(m); + m = insert_rows(m); + m = transpose(m); + + let mut p: Vec<(i32, i32)> = Vec::new(); + for y in 0..m.len() { + for x in 0..m[0].len() { + if m[y][x] { + p.push((x as i32, y as i32)); + } + } + } + println!("{:?}", p); + + let mut res1 = 0; + let mut res2 = 0; + + for i in 0..p.len() { + for j in i..p.len() { + if i != j { + let (x1, y1) = p[i]; + let (x2, y2) = p[j]; + res1 += (x2 - x1).abs() + (y2 - y1).abs(); + } + } + } + + println!("res1: {}", res1); + println!("res2: {}", res2); +} -- cgit v1.2.3