summaryrefslogtreecommitdiff
path: root/2023
diff options
context:
space:
mode:
authornekineki <nekineki@nekineki.net>2023-12-13 19:52:27 +0100
committernekineki <nekineki@nekineki.net>2023-12-13 19:52:27 +0100
commit62283ad92238c33e4ac1707b3467dfe0b9ebf79a (patch)
tree50d492751cceb2c9a546ace70a4935bac1746594 /2023
parent03c3c0491b6b449270c819fe099a3c00072ac1ee (diff)
day11 part1
Diffstat (limited to '2023')
-rw-r--r--2023/day11.rs96
-rw-r--r--2023/in/day11.pzl140
-rw-r--r--2023/in/day11.ref10
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 @@
+...#......
+.......#..
+#.........
+..........
+......#...
+.#........
+.........#
+..........
+.......#..
+#...#.....