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 +++++++++++++++++++++++++++++++++++++ 2023/in/day11.pzl | 140 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2023/in/day11.ref | 10 ++++ 3 files changed, 246 insertions(+) create mode 100644 2023/day11.rs create mode 100644 2023/in/day11.pzl create mode 100644 2023/in/day11.ref (limited to '2023') 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); +} diff --git a/2023/in/day11.pzl b/2023/in/day11.pzl new file mode 100644 index 0000000..d58a7d8 --- /dev/null +++ b/2023/in/day11.pzl @@ -0,0 +1,140 @@ +.#......................#........................#.........................#................#............................................... +...........................................................................................................#...........#.................... +........#...................#.......#............................................#....................#.................................#... +.........................................#............#.........................................#........................................... +....................................................................................................................................#....... +#........................................................................................................................................... +................#......................................................#.............#...................................................... +......#..............#.........#......#........................#............................................................................ +............#.....................................#......................................#...........................#...................... +.....................................................................................................#....................#................. +.....................................................................#.......#............................#......#..............#........... +#........................................................................................................................................... +...................................#.....................................#.................................................................. +.........#................#................................#...........................#......#.......................#..................#.. +...............#....................................#..........................................................#............................ +...........................................#..................................................................................#............. +...............................#...........................................#.......#.................#...................................... +#..............................................................#..........................................#................................. +...........#.........................................................#.............................................#........................ +......................#...........#...........................................#..........#.....#............................................ +........................................................#...............................................................#......#............ +...#..........#.........................#................................#.................................................................. +............................................................................................................................................ +..................#..................................#..............#..................................................................#.... +...............................#...........................#...................#.............................#.............................. +....................................#....................................................#.............#...............#...................# +................................................................................................#........................................... +.#............#............#........................................................#......................................#................ +.......#...................................#........#....................................................................................... +..........................................................#................................................................................. +..............................................................................#..............#.......#................................#..... +.................................#..........................................................................#.........#..................... +....................#....................................................................#......................................#........... +........#...................................#.....................................................................#......................... +#........................#.........................#.............................................#.......................................... +.................#.........................................#.........................#...................................................... +..............................#.................................#.......................................................................#... +......#...............................#..............................................................................#.............#........ +......................................................#..................#.................#............#.......#........................... +..............#...........#......................................................#.......................................................... +............................................................#............................................................................... +.....................................................................#...................................................................... +.#..................#........................................................................#................................#............. +.........................................#..........................................................................#....................... +.........#.....#..............#..............................................#.........#..............#..............................#.....# +...............................................................................................................#............................ +...................................................#...................#...................................................#................ +.......................#...........#..............................#......................................#..............................#... +...........#................#............................................................................................................... +...........................................................................#.................................#.............................. +................#......................................................................#...........#........................................ +.....................................................................................................................#........#......#...... +..................................................#.............#..............................#............................................ +......#.....#...........#..................#..............................................................#................................. +............................................................................................................................................ +...................#...................#..................#....................................................#........................#... +............................................................................................................................................ +.........................................................................#..................#............................................... +.....................................................................................................................................#.....# +...................................#...........#....................#....................................................................... +..#.....#.....................................................................#.........................#................................... +...........................#.........................#..................................#..........#..................#..................... +..................................................................................#............................................#............ +..............#................#...............................#............................................................................ +............................................................................................................................................ +.....................................#.........#......................................#..............#........#..........#.................. +.....#............#...............................................#........................................................................# +..........................................................................................................#................................. +..........#.............#.....#...........................#.....................#........................................................... +...............................................................#.................................#....................................#..... +....................................#..................................#.................................................................... +#......................................................................................................#..........#..........#.............. +..........................................#.............................................#................................................... +.................#.............................#........#......................................#.........................#...............#.. +......................................#..........................................#.......................................................... +............#...............................................#............................................................................... +...........................................................................................#..........................................#..... +.....#................#...............................................................................#..................................... +............................#......................#................#.............................................................#......... +...................................#.........................................................................................#.............. +.#.......................................................................#.........#........................#............................... +.........................................#.................#.....................................#...............#.......................... +..............................#............................................................................................................. +.................#...............................#.............................#.......#.....#.......#...................................... +.......................................................................#.................................................................... +............................................................................................................................................ +......................................#...........................#......................................................................... +.................................................................................#.......................................................... +..................................#.......................#................................................................................. +......................#..............................................#...........................#..........................#.....#.....#... +...........................#............#................................................................#.....#............................ +...........................................................................................#................................................ +............................................................................................................................................ +.........#.........#..........................................................#.............................#.........#.............#....... +...........................................#.............#.................................................................................. +............................#..........................................................#..........................#......................... +.......................#.........#.......................................................................................................... +......#...........................................#....................#.......................#..........#................................. +...............#.................................................................#..........................................#............... +..........................................................#......#....................................................#............#......#. +......................................................................................................#..................................... +...............................................................................................................#............................ +...............................#.....#................#.............................#....................................................... +..#............................................................................#...............#..........................#................. +.......#...................................#........................................................#....................................... +..............................................................#........#.....................................#.............................. +...........................#.......#..............#......................................................................................#.. +......................#......................................................................................................#......#....... +..............#...........................................................................................#.............#................... +..........................................................#.........#.........................#............................................. +.......................................#.......#...............................#..............................#............................. +................................#...................................................#....................................................... +#..........................................#........#..........#............................................................................ +...........................................................................#............#.........................#..................#...... +............#...........................................................................................#................................... +...................................#........................................................#............................................... +........................#.................................#......#.......................................................#.................. +........#................................................................#.................................................................. +...................#..............................#.................................#..............#.........#.....#.............#.......... +..........................................#...................#........................................................................#.... +.........................................................................................................#.................................. +..............................#.........................................................#................................................... +.#..............#........................................................................................................................... +...................................#...........#........................................................................#................... +.........#...............................#........................................................................................#......... +....................#........................................................................#.....................#.........#............#. +..............................................................................#.......................#.......#............................. +.................................#.......................#...............#...............#.................................................. +............................................................................................................................................ +............................#........#...................................................................................................... +......................#........................................#................#...........#..............#........................#....... +.....#.......#........................................................................#..........#........................................#. +..................................................#......................................................................................... +...............................................................................................................#.........#.................. +.........................#........#........................#.............#..........................#....................................... +..........#..............................#......................#..........................#................................................ +#..................................................................................#........................................................ +...............................#................................................................................................#........... +.....................................................#.......#.............................................#................................ +......#...............#..............#.........#..................#...............................................#......#...............#.. diff --git a/2023/in/day11.ref b/2023/in/day11.ref new file mode 100644 index 0000000..986aad4 --- /dev/null +++ b/2023/in/day11.ref @@ -0,0 +1,10 @@ +...#...... +.......#.. +#......... +.......... +......#... +.#........ +.........# +.......... +.......#.. +#...#..... -- cgit v1.2.3