~ttt/aoc18

97f40aa055aeb41f24ef6380f03770ab8b61e49f — T T 1 year, 2 months ago cdee6ac master
Day 25
3 files changed, 1336 insertions(+), 1 deletions(-)

M aoc18.asd
A day25.input
A day25.lisp
M aoc18.asd => aoc18.asd +2 -1
@@ 38,4 38,5 @@
	       (:file "day21")
	       (:file "day22")
	       (:file "day23")
	       (:file "day24")))
	       (:file "day24")
	       (:file "day25")))

A day25.input => day25.input +1245 -0
@@ 0,0 1,1245 @@
-6,-2,-6,5
-8,0,1,-8
8,6,-1,2
-2,3,0,1
5,2,2,-8
-5,-2,2,1
6,1,-3,6
-5,6,-6,6
2,3,-8,0
8,-7,2,-3
8,-5,7,7
5,-2,1,3
0,-5,5,0
-6,7,-8,-1
2,-3,0,-8
-2,-5,7,-7
-8,-4,0,-4
7,-7,0,4
-2,0,6,8
3,-7,0,-2
6,5,7,0
-5,2,2,-4
-1,7,8,-7
5,-4,-7,7
5,3,4,0
-8,8,-8,3
7,8,2,0
-8,-2,5,-7
1,-3,8,4
3,3,6,-8
3,-2,-6,3
-6,0,3,-4
7,3,5,3
-3,0,6,0
-1,8,-7,-2
-6,-1,-6,2
8,0,-4,5
-4,-1,3,-1
3,0,1,-1
7,0,-6,8
7,-4,5,-6
7,-8,-8,-4
-3,4,-8,-7
-5,2,-6,-2
-4,-2,6,-8
6,6,6,-3
2,-5,8,0
-2,5,5,0
-6,-4,2,0
3,-4,-7,0
0,7,-4,2
0,-3,3,2
8,-7,7,1
-1,-8,-8,1
7,8,-5,3
5,-4,-2,-4
6,-7,-8,-1
0,5,-5,-3
-1,-8,-2,4
5,8,2,-7
3,-2,2,2
5,5,1,1
0,-2,-3,-3
-6,-8,0,2
6,-5,7,0
-8,3,-8,7
-1,6,8,3
8,-5,7,0
-4,-1,-4,0
-7,1,2,4
8,-1,-8,2
4,2,7,6
5,6,0,3
6,6,4,0
-3,-5,-8,4
-6,8,3,0
0,-5,0,-6
5,-7,1,6
-7,2,3,0
-5,-2,-8,-7
-8,2,2,2
3,8,-4,-3
-5,0,-2,-3
8,-4,4,-7
-7,8,7,-8
5,-1,2,-3
6,4,4,1
6,3,-5,5
-3,-1,-1,-8
0,-3,-2,8
0,7,-8,2
-3,0,-4,5
2,-5,-1,-3
-1,-7,8,-5
8,-8,-1,8
-7,-1,-7,0
3,7,-4,2
-6,4,-6,0
2,-1,0,-7
-6,-4,0,6
-7,2,3,3
-3,-2,-3,-1
8,-4,7,7
8,-3,5,7
5,8,0,-5
-6,0,-2,4
-7,-4,-3,-4
8,-2,8,5
-7,4,2,0
-1,-2,3,1
1,5,7,-6
-2,6,0,4
3,7,2,-8
0,-6,7,3
3,-7,-4,0
-2,7,8,-6
2,0,-6,-4
3,3,-2,4
7,-2,4,0
-7,-2,-3,5
-3,-8,-4,6
-6,0,3,-5
0,-3,0,-8
8,-4,5,1
1,0,-7,-5
-8,5,0,-2
-7,-8,3,6
7,-7,3,7
-7,-5,-8,6
0,5,8,0
0,-6,0,7
0,3,2,-2
6,-8,-7,2
7,4,-5,2
-8,3,6,4
7,-8,1,-5
-3,-5,4,-5
-8,0,0,-3
3,-3,-8,1
4,6,3,5
3,-5,-2,0
8,-6,-7,-3
-3,-6,-4,6
2,-4,2,4
5,4,2,3
6,0,0,3
-2,4,-6,0
8,-4,-7,-7
3,0,1,1
4,0,1,2
-8,-3,2,-6
0,-2,-5,-5
6,0,7,-4
0,-5,-7,-1
-8,-1,-5,3
0,-1,3,3
6,8,-2,0
-8,-8,-6,-4
-2,8,1,2
-4,-2,2,-3
-3,3,6,-8
-4,0,-4,7
-7,-2,4,-5
5,3,-3,1
-2,-2,-5,-8
0,5,6,4
6,-5,2,-6
0,-3,-6,0
-4,6,-7,-3
-6,-7,-1,-7
8,-7,6,-1
6,-4,-7,7
-6,-5,8,-3
-6,7,7,-1
1,4,0,-5
5,8,-7,2
1,0,1,4
3,2,-8,4
0,4,0,5
4,5,-7,-6
5,1,-3,-6
0,-7,1,0
6,-3,-5,-4
-7,3,4,2
-2,-2,-5,3
-6,3,5,-3
4,7,-6,-6
1,4,-7,-6
3,-6,-1,1
-6,0,-2,7
-7,3,5,-4
1,5,1,-5
7,7,6,-6
6,0,0,4
2,-5,-5,3
8,3,3,3
2,-3,1,-3
1,-2,3,-7
-2,-6,-1,-7
-8,2,8,-5
7,4,7,1
1,0,-5,4
-4,-3,-3,2
-7,3,-1,-3
7,6,-7,-1
7,-3,5,-1
5,-1,6,1
-4,3,-4,7
3,-7,0,5
3,0,-5,0
-5,8,-8,-2
-1,0,0,-5
-1,2,-4,5
2,0,-5,-1
7,2,0,-4
-6,-5,2,-2
-1,-2,-8,-2
0,-6,5,0
-2,0,-5,1
-6,-3,-1,3
4,8,-1,-4
4,-3,-3,-5
5,-4,0,8
0,-7,-4,-5
7,7,1,-8
2,8,-4,3
1,7,-5,0
-4,0,4,4
5,6,-8,-7
6,1,-4,8
2,-8,4,6
-5,8,0,-2
5,2,-1,6
0,-3,0,-6
-6,-8,0,6
-7,-1,-1,4
8,-7,-1,-6
-7,-2,-1,-6
8,5,7,2
-5,-6,3,-3
3,0,-3,-1
0,7,0,6
7,4,0,-5
4,-2,-5,4
-4,4,1,6
7,2,-5,1
-7,-5,7,3
2,4,7,-8
6,1,2,-1
2,0,-1,1
-7,0,6,4
-4,8,-8,3
-6,-5,-6,-2
-6,-4,5,0
-2,-6,-6,8
-8,3,4,6
-6,7,-5,2
8,6,6,7
-4,8,-5,-1
5,1,-5,-3
6,-3,-8,-1
0,3,7,0
3,0,0,0
3,-4,-7,-1
-3,-7,0,-3
5,5,-7,2
-2,8,0,2
-1,-1,-7,3
0,0,-5,8
-1,-1,-3,-1
4,2,0,0
7,-3,5,-5
-4,0,-5,0
3,0,7,2
-2,0,-7,3
6,3,1,6
0,-2,-4,0
7,5,5,4
0,5,-1,0
0,-2,1,6
-7,7,0,0
-3,7,4,4
4,0,1,8
6,-7,0,-8
-3,1,-6,-7
3,4,-5,5
-1,0,2,4
-8,-2,-3,3
-4,8,-1,-1
2,2,5,-3
0,-5,8,-4
3,6,0,-2
-3,-4,1,-1
-3,3,-3,3
-8,1,-8,-6
5,-2,-8,-6
1,8,-5,0
-5,-3,0,4
0,-2,7,-7
-6,8,5,7
8,-7,3,7
-7,2,7,8
-6,3,-6,-4
8,2,-4,-8
-1,-7,-6,3
3,-2,-1,4
0,-4,-5,-7
2,-1,-2,-7
-7,0,0,4
7,-3,0,6
-2,-6,-4,-3
2,2,-8,-5
-2,0,0,7
0,4,-2,-7
-1,0,0,6
5,-2,-3,8
-1,6,-7,-1
-1,-1,2,0
0,-4,-3,1
-4,7,3,7
0,0,0,4
7,4,0,7
7,8,2,-1
-4,-2,4,-2
-5,-6,-4,0
-3,7,7,-7
3,-8,-8,0
2,0,-1,0
-5,-2,-8,-2
6,-4,-6,-5
2,-1,-1,-7
4,-1,-4,1
-1,0,6,8
-5,-5,0,2
3,-4,2,5
7,4,-1,4
-2,-5,0,8
7,0,3,3
5,-5,-7,-6
8,8,2,1
0,-5,-6,6
3,-7,-7,-4
3,-1,2,2
-6,6,8,0
-6,6,3,-5
-6,0,0,0
-4,-4,-1,-7
0,-4,-6,0
5,4,8,-2
-2,-5,8,3
4,6,6,-1
-3,0,0,-1
8,6,-2,-1
8,-3,4,-6
-1,8,-7,-8
2,-6,-3,-7
3,4,1,6
4,-6,5,-5
-1,-6,0,5
-7,3,0,8
6,-6,-3,4
0,-6,-2,4
5,5,4,-4
3,-5,4,0
-6,3,6,4
7,7,8,7
-3,6,5,-2
2,-5,-1,-8
5,3,4,6
7,2,3,0
-3,-1,1,-4
-2,-3,-7,2
3,6,5,5
8,3,-4,7
7,0,-4,8
-5,-8,0,0
-4,0,1,-4
3,-1,0,7
5,3,2,-4
-7,-7,3,7
0,3,5,-2
-2,-4,8,6
-4,8,-2,3
-1,-6,6,6
-3,1,-8,1
-3,-5,-8,-7
-7,5,-8,-3
4,-2,3,-2
-3,-4,-8,2
0,-6,-8,-3
4,-4,0,-4
-5,-6,-3,0
4,-8,-2,-5
7,6,-6,7
6,-1,6,0
-8,5,-8,1
7,-5,-8,3
7,-5,-2,3
-5,-2,0,7
-1,7,4,5
-2,3,-3,2
-6,6,3,2
1,1,0,1
-3,-5,0,-6
-5,1,-2,3
-5,2,0,-6
0,-6,6,8
-6,3,-8,0
-5,3,8,5
3,3,-2,0
7,5,-2,-2
8,0,7,0
1,0,0,3
3,0,-7,7
-5,-7,5,4
-2,0,7,6
4,-5,-7,-3
-1,0,4,-1
-8,-3,0,-4
-1,8,7,-1
5,3,-2,0
3,-4,-7,3
8,-1,3,-7
-3,-1,3,-4
-1,-2,0,-7
3,-8,7,0
-8,2,5,-5
3,5,5,2
-4,-1,4,-3
-2,-6,8,-5
-5,-1,-7,-6
8,-5,-7,4
7,-7,0,-4
0,3,4,0
7,-6,7,0
-1,-1,2,-8
3,0,2,-2
-1,-6,-6,-8
-6,-7,7,-2
-1,0,-4,-6
-7,-1,-6,4
7,2,3,1
-6,2,7,0
-7,-4,8,-5
0,-6,-1,2
1,0,4,5
-4,3,3,-7
-3,3,3,2
6,-4,-3,1
-3,-4,2,2
3,-1,8,7
-8,0,-3,-4
-8,0,3,4
8,7,4,-5
-4,-5,-3,-1
6,-1,-7,-4
3,0,-5,6
-3,2,6,3
-5,0,-5,8
-6,-4,0,1
-6,7,0,7
1,-8,5,2
-7,-5,3,-5
0,-6,0,-4
-3,-5,-6,7
6,-1,-5,-5
0,-4,4,-4
4,-6,1,-1
-4,6,-3,-1
4,8,-7,3
8,3,-8,2
5,4,-5,-4
7,2,0,-5
-3,2,-5,-1
-1,0,-6,2
-5,8,-8,8
1,-7,-1,-3
4,-4,7,-3
-2,0,0,-3
8,1,7,-3
-3,-4,4,0
-4,6,6,4
-8,2,7,-3
-5,4,-8,-4
-4,5,2,8
-8,6,0,0
-8,7,8,-4
2,7,8,0
-2,-1,3,1
7,-4,-4,8
-6,-5,-2,0
0,-1,-4,-3
0,6,8,-4
6,-8,-2,3
0,-8,7,-1
0,-6,-5,7
1,5,-1,1
3,-3,8,-2
7,-8,-2,-7
2,-7,4,-7
0,-6,-4,8
6,-6,6,1
-7,-8,-3,-8
2,-4,-2,7
8,-1,8,0
6,-2,0,8
-3,-7,-8,0
3,-3,-4,6
-1,7,2,6
-3,1,-4,-1
-3,-1,5,0
-3,-3,-5,0
-8,-3,-1,3
4,-5,-7,0
-6,-1,3,-4
5,-3,6,2
0,4,5,5
4,-2,0,8
-2,-5,-6,-7
4,7,4,2
3,-4,0,8
-8,-5,-6,3
-8,-8,7,-3
-3,0,1,-6
-1,6,8,0
0,2,8,6
0,8,2,-4
4,2,5,7
-6,1,-4,-4
-6,2,0,-7
0,2,-5,6
-4,0,3,4
4,-5,-5,7
-8,0,1,2
2,-2,-4,1
-7,8,6,3
-8,-3,4,7
-4,1,-2,-5
-2,2,-6,4
-1,-5,8,2
7,-7,5,-6
3,-7,-8,0
5,2,-6,1
-4,-1,5,2
-1,4,5,7
-4,3,0,-5
-5,8,6,-3
0,-3,1,4
2,4,-4,5
8,-3,0,3
8,6,3,-5
-7,6,-8,-8
0,-5,-8,-5
-6,5,5,-6
1,6,0,0
1,-7,5,-4
5,6,3,-7
-6,8,-2,7
5,2,-8,-2
7,3,-4,-1
-6,4,0,-4
0,6,7,1
-2,4,8,-3
2,1,0,1
2,-2,-6,0
4,-5,-4,-6
-3,5,6,2
-3,-5,0,0
3,-5,-1,4
0,3,0,0
-3,8,-7,1
-2,6,0,7
5,0,6,4
-6,-3,-4,8
4,7,-8,4
8,5,0,-2
4,2,8,5
-7,5,2,3
-1,5,2,2
8,2,-3,2
-7,-3,7,-2
3,-4,0,-4
-2,2,-2,0
4,-8,-5,6
3,-3,1,2
-2,5,8,5
-1,-7,1,-8
-5,-2,-6,-1
7,0,-5,-4
7,1,-1,-2
-4,5,3,-8
4,3,-4,-8
-1,5,1,-1
4,-5,2,2
-4,-3,-1,0
-4,6,6,-5
1,4,-3,1
-1,7,-1,-5
-8,-8,0,1
0,5,5,-7
-5,6,5,7
-1,-8,-4,5
1,8,-2,6
3,-5,-1,6
6,-5,0,1
2,4,-2,-8
-2,-5,4,0
-5,-3,1,7
5,-5,4,0
-2,0,2,-7
0,8,0,-1
-2,2,5,3
8,-7,7,6
3,-7,6,0
5,7,2,0
-2,1,3,7
5,-3,6,-8
-6,8,-3,2
2,8,-1,0
-1,0,-8,-8
-7,1,4,-3
0,-4,6,2
0,-4,6,-7
-2,5,0,-5
-7,5,6,-6
0,2,2,1
-7,8,-3,7
-6,0,2,-7
8,-4,-7,3
-3,0,7,0
0,-5,6,-6
1,0,0,7
4,5,-5,6
2,0,-5,4
5,8,-7,-1
0,5,0,-6
-2,4,-1,6
5,-3,6,-4
8,-1,-7,-8
-3,4,7,6
5,-5,-2,5
0,-7,0,-1
-1,5,2,-7
5,-1,0,4
6,-6,-5,-5
-7,-6,2,-1
7,4,5,-1
-7,3,-6,8
8,-8,3,4
6,-6,-2,0
0,-3,6,0
5,-2,-7,8
7,0,0,0
5,-7,6,-6
-7,-8,-1,-7
0,7,0,-1
8,-2,0,-3
8,-8,-4,0
-7,-4,1,-5
6,-1,4,-4
3,-3,3,-3
-7,0,-3,2
0,3,-2,5
0,-1,6,-3
-7,-3,-6,-8
-1,-8,2,5
1,0,4,2
2,2,-8,0
2,-8,3,-7
8,0,-4,6
-8,7,6,-2
-7,4,-7,1
0,0,0,-1
0,7,7,-7
7,7,0,1
2,-4,-1,3
7,6,-2,-5
4,6,2,0
4,7,2,2
-4,-8,-6,1
5,5,2,-5
-6,3,-4,3
-2,3,8,-4
-8,-4,-6,-7
8,-5,-7,6
-6,2,-5,-1
3,0,-5,-8
-6,8,8,4
7,1,-3,-3
5,-2,7,-7
8,-4,-4,3
5,6,-6,7
3,-3,7,-6
-7,1,-6,-3
5,7,4,6
-2,1,-8,-4
-5,3,2,3
-8,-3,7,5
-2,3,-4,5
2,-7,0,4
7,-5,8,5
-3,-2,4,-7
8,-2,4,-8
5,-6,3,5
-4,-7,4,3
-7,0,-8,7
8,6,-3,0
0,-6,-6,0
5,8,-3,-5
-2,1,8,1
-5,3,8,7
-6,-2,6,1
-2,-7,6,-4
4,6,1,-2
4,8,0,-2
-8,3,1,3
3,-8,2,-1
0,-6,6,-8
-4,-7,-5,-6
2,6,0,1
8,0,0,-4
-6,0,0,-5
-4,7,-6,4
-3,-5,8,-2
-2,5,-8,8
3,0,1,0
-2,8,0,4
-8,0,8,7
-1,-6,-3,-2
-5,-4,6,-3
-2,-6,1,5
-8,3,-5,-3
-8,-3,3,2
3,-2,-3,-2
3,0,5,-5
4,7,-5,3
2,7,-7,-6
0,0,0,1
6,-8,-5,-5
7,-6,3,-6
-6,-3,-3,-8
8,-1,0,0
-1,6,-3,-8
5,-3,-4,0
5,-8,3,7
5,0,-2,3
0,0,-8,1
-4,7,-8,-6
-3,-1,0,4
-6,-2,-6,-6
1,0,-5,6
3,3,7,8
6,4,0,6
-4,-6,-3,-1
-8,-5,6,6
5,6,-2,2
0,3,-1,-7
-4,-8,-3,0
-3,7,0,-5
0,8,5,7
-4,-7,-2,4
6,1,5,4
-2,5,-5,-4
-1,1,-7,5
-6,0,7,5
4,0,-3,2
0,-6,-5,6
8,1,6,0
2,2,-3,-8
-3,-6,-6,8
0,5,5,2
0,3,-4,3
1,-1,0,6
0,-7,4,-3
-4,-1,-8,-5
4,8,-2,0
-1,-8,3,3
-7,-2,2,2
-5,-6,6,0
0,8,-5,1
-1,2,-6,7
0,-8,3,-3
-3,-4,3,0
-2,7,7,-4
-5,-5,-3,1
-2,0,6,2
-4,7,-2,2
2,8,3,5
2,-6,0,5
2,-8,-6,0
-2,7,0,6
5,-2,0,8
6,-5,8,-6
5,-7,-2,-7
1,-5,7,1
3,6,2,-8
6,5,0,7
-2,3,-5,-2
8,-8,1,-3
-2,0,-4,-4
6,0,-5,-4
-2,0,4,-8
0,-7,-4,3
5,-4,-1,2
1,8,5,-4
6,6,-8,-3
-6,-2,3,1
3,-1,5,3
-5,-5,0,8
8,8,-8,-7
0,2,0,6
-6,8,-8,2
7,4,0,-3
-2,1,8,-2
6,5,0,4
-2,4,-1,-8
-2,-8,2,-1
-2,-3,-3,8
6,8,6,-4
-8,4,4,8
-6,-1,-4,6
0,0,4,-4
-3,1,5,-1
0,2,-7,-2
-7,-7,-3,-7
0,7,-7,-8
-3,1,-2,-2
7,6,-5,-8
-1,3,0,3
-8,-5,4,7
7,-2,-2,-6
-6,2,8,7
7,-6,-6,-1
-2,-8,-4,-2
3,2,1,8
-3,-1,4,-4
8,5,7,6
2,2,0,7
5,-6,-3,7
-5,4,4,-1
-8,0,6,-1
-8,5,-1,-1
1,-8,-2,6
-8,7,4,-3
4,0,4,-5
-7,-8,-3,1
0,0,8,-3
1,-7,1,5
-3,4,6,2
4,7,0,3
7,0,3,8
-4,2,3,0
7,-8,-7,-7
-5,6,0,-2
7,2,-7,7
-8,-5,-4,-7
6,-6,-8,3
2,1,2,-7
4,6,-6,5
-8,-1,0,6
8,3,-4,2
5,0,6,-2
2,-2,-8,-5
-6,4,5,-1
1,3,2,1
4,-2,-7,5
-4,-4,3,3
-3,2,4,-1
2,5,0,-5
5,5,-5,2
-5,8,2,7
8,3,0,3
-6,-7,0,-6
-8,-6,2,8
-1,-7,-2,6
2,0,-8,-7
0,0,-2,-3
0,-1,-2,-4
1,-8,1,-7
1,-6,-7,5
5,0,3,0
5,1,-1,-3
4,0,3,-5
3,1,-1,0
4,2,1,0
-3,-6,-1,-7
4,-3,-6,6
-4,2,-6,-7
-3,1,-7,2
7,-2,6,-7
7,7,0,4
-4,-5,-7,2
-3,0,-2,6
2,-7,-4,4
0,5,2,3
-5,5,7,4
1,3,-8,-4
3,2,4,-6
2,-4,4,1
5,-4,3,7
1,8,-8,2
0,8,-3,0
-1,-8,2,-8
8,2,8,4
4,-4,-4,-6
0,-7,4,1
-4,-6,-1,0
4,2,5,3
-2,6,-8,-3
-3,3,6,8
8,-3,3,7
-7,0,-8,0
-4,8,-1,3
-1,-7,0,-1
2,3,0,5
-8,4,1,-1
2,-5,-3,-1
-2,8,-8,-6
-6,8,-8,-8
0,-7,1,4
-2,-7,-8,7
7,-2,5,-7
-1,-8,1,-6
6,-4,8,5
2,-2,1,-1
-7,6,0,-1
-5,1,-1,-7
-5,-8,2,6
6,-5,7,-2
4,2,0,7
8,6,3,-7
-6,0,-5,-5
3,-8,2,3
-2,0,-6,-7
4,-3,5,-7
-1,6,-1,-3
2,-4,-7,7
0,-5,-4,0
1,-8,0,6
0,2,4,-5
1,-6,-3,5
7,6,-5,0
-5,-5,7,2
7,8,5,2
-7,-7,4,-8
8,-1,-1,0
-7,-7,-3,-3
8,-3,2,4
-6,0,1,5
6,2,3,-6
-2,2,7,6
-7,-6,-1,2
-8,7,-4,6
2,-6,0,4
7,4,0,-1
-4,-6,7,7
0,0,1,-8
-7,6,0,0
6,-4,-8,4
3,2,4,0
-6,-2,0,-2
-2,6,-8,8
-4,-6,-6,-8
-1,-1,8,-1
7,4,-4,-6
-1,6,2,-1
6,-7,-8,0
6,0,-7,8
0,-1,3,6
4,-5,-8,1
6,-2,-5,6
0,6,-5,7
5,5,8,8
8,-8,3,-3
0,6,0,-4
-6,1,1,-6
2,1,8,-6
-6,-3,0,0
-2,0,6,0
-6,0,6,0
-3,-5,0,-3
-3,3,0,-5
-5,3,6,-6
-6,0,4,-7
-8,0,-2,-6
-2,-5,-8,-1
3,5,7,-3
2,-7,-3,7
-3,2,-1,1
3,0,4,-8
-8,7,6,7
-1,-4,1,1
-3,-1,1,0
0,-2,1,8
0,6,-6,-1
3,1,-1,-4
-1,-1,-1,-1
-4,-7,7,7
-4,-1,-6,4
-7,-3,-2,1
6,0,3,0
2,-2,-2,-1
0,-5,2,6
8,6,-8,-2
7,-2,-1,6
7,7,0,2
-4,-3,-1,-2
1,1,-3,3
-3,2,1,-7
-4,0,-8,0
-5,-7,1,2
-5,0,4,-4
-5,8,-6,-3
-3,2,-2,6
-7,-1,7,8
-1,-3,7,-1
7,1,7,1
-1,0,-1,-6
-6,-3,4,-1
3,5,2,0
-4,4,5,0
0,0,4,-8
4,-1,-8,-4
2,7,2,0
3,-6,3,2
-2,-3,-3,7
1,-3,1,1
8,-5,7,1
5,-3,-3,4
0,-3,8,3
0,8,2,5
-3,-2,0,5
-5,-1,-8,-6
-6,8,2,5
8,3,-8,5
-4,-8,2,-5
7,0,-1,0
5,5,-8,-7
4,-4,3,3
8,-8,4,0
-8,7,-4,-1
4,-3,-2,-5
2,5,5,-7
0,-8,7,6
3,0,5,5
-7,-5,3,-8
1,-4,-8,-6
-3,3,0,0
-1,-8,-1,-8
-1,6,0,-8
1,-7,-7,4
-7,0,-4,-4
-3,5,1,0
-8,-5,-6,7
8,0,3,7
5,-4,2,-3
1,6,-2,7
-1,1,-6,8
1,3,3,8
6,-5,0,0
-6,0,-1,-5
6,5,7,3
-1,1,5,2
1,-6,3,-8
8,-5,0,-8
5,-1,-1,5
8,-2,-3,-1
0,-4,4,8
-3,8,-8,-6
-7,0,2,-4
4,1,6,-6
0,7,6,7
1,-7,-4,6
4,-8,7,6
6,0,5,-7
-7,0,8,-4
-3,0,0,-3
-1,-8,-6,4
-6,-8,7,8
8,3,8,0
4,8,3,5
-2,-1,0,3
8,-7,3,2
6,3,0,-1
-1,-1,-2,-2
-7,-6,8,-7
-8,-4,-6,-1
3,6,-7,6
1,0,-1,1
2,-8,1,-8
-4,5,-7,0
0,-3,2,8
-8,0,7,-6
3,-4,-5,2
1,1,-6,-4
7,-7,0,6
-7,4,7,-2
-5,-6,-3,-5
1,-4,5,3
-8,-7,6,4
-2,-1,-8,7
7,-1,7,7
-8,-6,-3,8
5,8,5,7
4,6,3,6
2,-5,-8,-3
0,1,0,-3
-1,-3,7,3
0,0,-5,2
0,-1,0,1
1,2,-1,-8
7,6,-2,0
3,6,3,-1
-5,0,-5,2
-2,-2,6,-8
6,8,-6,-4
0,-2,-4,-7
3,-5,8,4
-8,-8,-4,-8
8,8,7,6
3,-7,-4,1
0,7,-5,-3
-5,-4,-5,4
2,-7,7,-7
-8,-3,-1,7
0,1,-5,1
2,4,-5,-6
5,7,-1,-4
2,-8,-8,6
8,3,-6,-2
3,-5,-6,-5
2,2,1,-2
4,-2,-3,7
2,-4,-1,7
-1,-2,8,3
-3,-3,-2,-7
2,-7,0,3
-6,7,6,0
7,6,-5,-4
8,-6,-1,8
-4,4,4,1
-2,0,2,1
-3,-4,-6,-3
0,7,-1,2
-6,-8,-6,5
-6,-2,-3,-1
-3,-4,0,0
-8,-6,2,2
5,-1,1,-6
-2,1,1,-4
-7,-4,0,6
-8,7,-6,2
2,-6,-4,-4
-3,-5,6,6
-8,-8,-8,-5
4,6,5,0
5,7,0,-6
0,-5,3,6
5,7,3,6
1,-4,2,2
0,-1,-6,-7
-4,-1,-3,-2
3,-3,-2,7
5,-1,-3,3
-2,-8,-7,-7
-6,0,1,-2
0,0,-3,6
1,4,3,0
-5,-6,-4,-2
-1,-7,-7,7
-3,-3,8,7
0,7,8,3
5,0,8,3
-8,1,5,-7
-2,-6,-7,0
8,7,-2,4
4,7,-6,7
-2,3,2,1
-6,6,-4,0
5,-2,-5,-6
-6,-8,3,5
-1,0,3,1
7,-7,-8,-3
-4,-2,4,-8
-2,3,-4,0
8,-2,-2,0
7,-2,-3,3
0,2,-8,7
0,0,-8,4
-8,8,5,3
3,4,8,7
-7,5,4,2
-8,-3,-7,0
5,1,1,0
-1,-3,-3,4
7,-7,-4,-3
-7,0,3,-4
7,-6,7,-6
1,-6,2,-8
3,-1,-4,5
0,4,-5,-5
0,-8,7,8
-2,0,3,-1
8,0,-5,-2
-3,2,2,7
-3,0,4,-4
6,5,0,-3
-7,2,-3,-8
1,5,-2,-4
-3,-8,8,-2
-5,7,5,-1
0,3,6,2
-8,8,7,8
5,-3,7,7
-5,-2,5,-2
4,7,0,0
0,7,1,3
-5,-8,-5,5
6,-8,1,-2
6,7,-2,5
-4,7,0,-8
0,6,1,-1
5,0,-4,6
0,-3,-3,8
-8,-6,5,2
7,-3,-6,-3
-6,-7,-2,-8
6,3,4,-6
1,0,-2,8
0,-6,3,6
7,3,2,7
5,-8,-5,0
6,3,0,5
-4,-3,7,1
0,-2,-7,-5
0,8,4,-7
-8,-4,-3,-4
-2,4,1,0
-2,-5,5,1
-8,5,-7,-7
4,-3,5,7
-1,-5,8,0
0,5,2,0
-5,2,7,-1
8,6,6,-4

A day25.lisp => day25.lisp +89 -0
@@ 0,0 1,89 @@
(in-package :aoc18)

(defstruct p4
  (x 0 :type fixnum)
  (y 0 :type fixnum)
  (z 0 :type fixnum)
  (w 0 :type fixnum))

(defun p4-m-dist (p1 p2)
  (+ (abs (- (p4-x p1) (p4-x p2)))
     (abs (- (p4-y p1) (p4-y p2)))
     (abs (- (p4-z p1) (p4-z p2)))
     (abs (- (p4-w p1) (p4-w p2)))))

(defun parse-p4 (line)
  (cl-ppcre:register-groups-bind ((#'parse-integer x y z w)) ("(.*),(.*),(.*),(.*)" line)
    (make-p4 :x x :y y :z z :w w)))

(defun make-single-constelation (p)
  (let ((c (make-hash-table :test #'equalp)))
    (setf (gethash p c) t)
    c))

(defun read-day25-input (path)
  (let ((l (mapcar #'make-single-constelation (mapcar #'parse-p4 (read-lines path))))
	(set (make-hash-table :test #'equalp)))
    (loop for c in l do
	 (setf (gethash c set) t))
    set))

(defun print-constelation (c)
  (format t "constelation of size ~a:~%" (hash-table-count c))
  (loop for p being the hash-key of c do
       (format t "  ~a~%" p))
  (format t "~%"))

(defun print-constelations (set)
  (loop for c being the hash-key of set do
       (loop for p being the hash-key of c do
	    (format t "~a" p))
       (format t "~%")))

(defun in-constelation (p1 p2)
  (<= (p4-m-dist p1 p2) 3))

(defun in-same-constelation (c1 c2)
  (loop for p1 being the hash-key of c1 do
       (loop for p2 being the hash-key of c2 do
	    (when (in-constelation p1 p2)
	      ;(format t "~a ~a close ~a~%" p1 p2 (p4-m-dist p1 p2))
	      (return-from in-same-constelation t)))))

(defun merge-constelations (c1 c2)
  (let ((c (make-hash-table :test #'equalp)))
    (loop for p being the hash-keys of c1 do
	 (setf (gethash p c) t))
    (loop for p being the hash-keys of c2 do
	 (setf (gethash p c) t))
    c))

(defun find-all-in (con all)

  (let ((rest (alexandria:copy-hash-table all))
	(current (alexandria:copy-hash-table con))
	(prev-size 0))
    (loop while (/= prev-size (hash-table-count current)) do
	 (setf prev-size (hash-table-count current))
	 (let ((new-rest (make-hash-table :test #'equalp)))
	   (loop for c being the hash-keys of rest do
		(if (in-same-constelation current c)
		    (setf current (merge-constelations current c))
		    (setf (gethash c new-rest) t)))
	   (setf rest new-rest)))
    (values current rest)))

(defun find-all-constelations (in)
  (let ((ret (make-hash-table :test #'equalp))
	(rest (alexandria:copy-hash-table in)))
    (loop while (> (hash-table-count rest) 0) do
	 (block tmp
	   (loop for c being the hash-key of rest do
		(multiple-value-bind (c r) (find-all-in c rest)
		  (setf (gethash c ret) t
			rest r)
		  (return-from tmp)))))
    ret))

(test day25
  (is (= 367 (hash-table-count (find-all-constelations (read-day25-input "day25.input"))))))