diff options
| author | nekineki <nekineki@nekineki.net> | 2023-12-13 19:52:27 +0100 |
|---|---|---|
| committer | nekineki <nekineki@nekineki.net> | 2023-12-13 19:52:27 +0100 |
| commit | 62283ad92238c33e4ac1707b3467dfe0b9ebf79a (patch) | |
| tree | 50d492751cceb2c9a546ace70a4935bac1746594 /2023 | |
| parent | 03c3c0491b6b449270c819fe099a3c00072ac1ee (diff) | |
day11 part1
Diffstat (limited to '2023')
| -rw-r--r-- | 2023/day11.rs | 96 | ||||
| -rw-r--r-- | 2023/in/day11.pzl | 140 | ||||
| -rw-r--r-- | 2023/in/day11.ref | 10 |
3 files changed, 246 insertions, 0 deletions
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<T>(original: Vec<Vec<T>>) -> Vec<Vec<T>> { + assert!(!original.is_empty()); + let mut transposed = (0..original[0].len()).map(|_| vec![]).collect::<Vec<_>>(); + + 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<bool>>) -> Vec<Vec<bool>> { + 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<Vec<bool>>) { + 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<bool>> = Vec::new(); + for line in lines { + let mut r: Vec<bool> = 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 @@ +...#...... +.......#.. +#......... +.......... +......#... +.#........ +.........# +.......... +.......#.. +#...#..... |
