aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexandre Jesus <adbjesus@gmail.com>2023-12-31 11:56:39 +0000
committerAlexandre Jesus <adbjesus@gmail.com>2023-12-31 12:06:33 +0000
commit81798f0ec7a09106bc81a11dd59b908866e5fe09 (patch)
treed3e63bcf02768e3ed6bebf6fe7e4cd228a7b6980
parent48eda26e85a3085dc117860bf02cc69f8d62f893 (diff)
downloadaoc2023-81798f0ec7a09106bc81a11dd59b908866e5fe09.tar.gz
aoc2023-81798f0ec7a09106bc81a11dd59b908866e5fe09.zip
day11
-rw-r--r--data/11/example.txt10
-rw-r--r--data/11/input.txt140
-rw-r--r--day11.lisp46
3 files changed, 196 insertions, 0 deletions
diff --git a/data/11/example.txt b/data/11/example.txt
new file mode 100644
index 0000000..986aad4
--- /dev/null
+++ b/data/11/example.txt
@@ -0,0 +1,10 @@
+...#......
+.......#..
+#.........
+..........
+......#...
+.#........
+.........#
+..........
+.......#..
+#...#.....
diff --git a/data/11/input.txt b/data/11/input.txt
new file mode 100644
index 0000000..3a2450b
--- /dev/null
+++ b/data/11/input.txt
@@ -0,0 +1,140 @@
+..........................#.........................#........................................................#..............................
+.............#.....................................................#.........#......................#.......................................
+..................................#....................................................................................#...........#........
+....................#..........................#..................................................................#.........................
+.......................................................#...............................................................................#....
+.....................................#.........................#......#..............#......................................................
+........#...............#......................................................#..........#................................#...............#
+.........................................#................#..............................................#............#.....................
+....#............................#..........................................................................................................
+............#......................................#..............................................#............#............................
+......................#.....................................................................#...............................................
+.............................................................................#........#.........................................#...........
+.................#.....................................................#.................................................#..............#...
+................................#....................#.................................................#....................................
+.......................................#.............................................................................#......................
+..#.....................#...................................................................................................................
+............................................#.....................#...........#.....................#.......................................
+..................................................................................................................#..................#......
+....................................#....................#................................................................................#.
+.........#.....................................#..............#......................#......................................#...............
+..............#..........................................................#......................#.....#.....................................
+.......................................................................................................................................#....
+..................................................................#.........................#...................#...........................
+....#............................#.....#.....................................#................................................#.............
+.......................#..........................#.........................................................................................
+..................................................................................#.....#...................#.............#.................
+................#.............................................#.................................#...........................................
+#.....................................................................................................#...................................#.
+...........#..............#.....#.............#.....................................................................#.......................
+...........................................................................#................#.....................................#.........
+...................................................#........................................................................................
+..............#....................................................................................#........................................
+.....................................#................................................#.......................#.............................
+.....................................................................................................................................#.....#
+........#................#....................................#.................................#.........#.................................
+....................................................#..............#............#....................................#......................
+....#...............#........#..........................................................#.......................................#...........
+..........................................#.....#.......................#..........................#.....................................#..
+.......................................................#....................................................................................
+#......#...................................................................................................................#................
+............#...............................................................................#..........#..........................#.........
+............................................................................................................#...............................
+.....................................#....................#........#............................#...........................................
+........................#...........................................................#................................#....................#.
+......#...............................................#.....................#........................#......................................
+.................................#.....................................#..................................................#.................
+...................#......................#..................#..........................#.............................................#.....
+.............................#.....................#..............#...........................................#.............................
+.........................................................#.......................................................................#..........
+...............................................................................#.......................#.................................#..
+............................................................................................................................................
+............................................................................................................................................
+.................#.............................................................................................#.......#.............#......
+....#.....#....................................................#........#...............#....................................#..............
+..................................#..........#........................................................#.....................................
+............................................................................................................................................
+...................#..............................................................................#......................#..................
+............................................................................................................................................
+..#..............................................#......#.....#...........................#..............#....................#.............
+................#......#.........#..........................................................................................................
+.........................................................................#......................................#.........................#.
+....................................................#..............#............................#...........................................
+.....#....................#..........................................................................#......................................
+............#...........................#......#............................................................................................
+............................................................................................................................................
+.....................#.........................................................#.........................#........#.............#...........
+.........#..............................................................#.....................#..........................................#..
+......................................#...........#.....................................#...................................................
+.#...............................#..........................................................................................................
+..............#............#....................................#..................................#........................#...............
+.....................................................................#...........................................#..........................
+............................................................................................................................................
+.........#........#........................#.....#........................#.......................................................#.....#...
+............................................................................................................................................
+...................................#........................................................................................................
+..............#..........#..............#....................................#..........#.....#.............................................
+....#........................................#............#...................................................................#.............
+............................................................................................................................................
+#........#......................................................#........#.................................................................#
+....................#.........#..........................................................................#.......#......#...................
+............................................................................................................................................
+.......................................#..............#...........................................#.........................................
+................................................#.............................................................#.......................#.....
+.......................#...................#..............................#.................................................................
+...............#...................#....................................................#.............................#.....................
+....#......................................................................................................#................................
+.............................#.........................................#....................#.............................#.....#...........
+..............................................#..................................................#...................................#......
+...................#...................#..........................................#.................................#.......................
+............#.....................#....................#..................#.................................................................
+...........................................#........................................................#.......................................
+...........................................................................................................#................................
+...#............................................................#.............................................................#.............
+.........................#..............................................................#................................................#..
+...............#............................................................................................................................
+.......................................#.......#.............#..............................................................................
+.....................#...........#.............................................#............#.................#.........#...........#.......
+..........................................................................#.......................#.........................................
+.......#............................................................................#.......................................................
+....................................................#....................................................................................#..
+.................#........................................#.....#...........................................................#...............
+.#.........#..................................#.................................#..............#.........#.....#......#.....................
+.....................#............#.......................................................#.........#.......................................
+............................................................................#.......................................................#.......
+.....................................................................................#....................................#.................
+............................#................................................................#..................................#...........
+.....#.........................................................#............................................................................
+......................#..................#............................................................................#.....................
+................................................................................#.....................................................#.....
+#.................................#.......................................#.................................................................
+...................#......#.......................#...............#...........................................#.............................
+.............................................................#........................................#......................#..............
+.................................................................................................#..........................................
+..#..................................#....................................................................#......#..................#.......
+..........................................................#..................#........................................#.....................
+..................#........#........................................................#..........................................#............
+.................................#.............#.......................#...................................................................#
+................................................................................................#.........................#.................
+....#.....#.................................................................................................................................
+.......................#....................................................#...............................................................
+....................................................#.......................................................................................
+.............#..............................#..........................................#....................................................
+...............................#............................................................................................#........#......
+.#.......................................................#.........#...........#.................................#..........................
+....................................#.............#..............................................................................#..........
+.....................#.........................................................................#......#.....................................
+..........................#...........................#.........#.................#.........................................................
+..........#.................................#................................#..............................................................
+....#...........................................................................................................#..................#........
+........................................................................#..............#.....................................#..............
+..................#.......................................#.................................................................................
+........................................................................................................................................#...
+....................................................#.......................#..........................#....................................
+.....#..............................#.........................#..................................#..........................................
+..........................#............................................#........................................#.......#...................
+..........................................#.................................................................................................
+......................................................................................................................................#.....
+.......#...........................................#................................#........................................#..............
+#..................#..........................#..........................#.....#............................#...............................
+...................................#.....................................................................................#..................
diff --git a/day11.lisp b/day11.lisp
new file mode 100644
index 0000000..a5e6489
--- /dev/null
+++ b/day11.lisp
@@ -0,0 +1,46 @@
+(defun read-lines (filespec)
+ (with-open-file (stream filespec)
+ (loop for line = (read-line stream nil)
+ while line
+ collect line)))
+
+(defun empty-rows (lines)
+ (loop for line in lines
+ collect (every (lambda (c) (equal c #\.)) line)))
+
+(defun empty-cols (lines)
+ (loop for i below (length (first lines))
+ collect (every (lambda (line) (equal (aref line i) #\.)) lines)))
+
+(defun galaxies-coords (lines erows ecols eincrement)
+ (loop for i = 0 then (+ i (if erow eincrement 1))
+ for erow in erows
+ for line in lines
+ append (loop for j = 0 then (+ j (if ecol eincrement 1))
+ for ecol in ecols
+ for c across line
+ if (equal c #\#)
+ collect (cons i j))))
+
+(defun solve (filespec eincrement)
+ (let* ((lines (read-lines filespec))
+ (erows (empty-rows lines))
+ (ecols (empty-cols lines))
+ (coords (galaxies-coords lines erows ecols eincrement)))
+ (loop for coord in coords
+ for rem on (cdr coords)
+ while rem
+ sum (loop for other in rem
+ sum (+ (abs (- (car coord) (car other)))
+ (abs (- (cdr coord) (cdr other))))))))
+
+(defun solve1 (filespec)
+ (solve filespec 2))
+
+(defun solve2 (filespec)
+ (solve filespec 1000000))
+
+(print (solve1 "data/11/example.txt")) ; 374
+(print (solve1 "data/11/input.txt")) ; 9563821
+(print (solve2 "data/11/example.txt")) ; 82000210
+(print (solve2 "data/11/input.txt")) ; 827009909817