summaryrefslogtreecommitdiff
path: root/2022
diff options
context:
space:
mode:
authornekineki <nekineki@nekineki.net>2022-12-24 07:04:33 +0100
committernekineki <nekineki@nekineki.net>2022-12-24 07:04:33 +0100
commit1addc1ee10820384de416d30a0b9be595f7dc648 (patch)
treea5f4bdd5eaa99148d9ce032b1b4b4918c2845a0c /2022
parent8e2fb68df01c1d6145602c52f88632a8e19bb813 (diff)
day24
Diffstat (limited to '2022')
-rwxr-xr-x2022/day24.py125
-rw-r--r--2022/in/day24.pzl22
-rw-r--r--2022/in/day24.ref6
3 files changed, 153 insertions, 0 deletions
diff --git a/2022/day24.py b/2022/day24.py
new file mode 100755
index 0000000..ac72b58
--- /dev/null
+++ b/2022/day24.py
@@ -0,0 +1,125 @@
+#!/usr/bin/env python3
+
+# import numpy as np
+from functools import reduce
+from re import findall
+from copy import deepcopy
+from collections import defaultdict
+import sys
+
+# filename = "in/day24.ref"
+filename = "in/day24.pzl"
+data = open(filename).read()
+lines = [line for line in data.rstrip('\n').split('\n')]
+# print(lines)
+
+D = dict()
+for y,line in enumerate(lines):
+ for x,val in enumerate(line):
+ if val != '.':
+ D[(y,x)] = val
+
+def get_max(D):
+ min_y = 1000
+ max_y = 0
+ min_x = 1000
+ max_x = 0
+ for y,x in D:
+ min_y = min(min_y, y)
+ max_y = max(max_y, y)
+ min_x = min(min_x, x)
+ max_x = max(max_x, x)
+ return min_y, max_y, min_x, max_x
+
+def print_grid(D, P):
+ min_y, max_y, min_x, max_x = get_max(D)
+ for y in range(min_y, max_y + 1):
+ for x in range(min_x, max_x + 1):
+ if (y,x) in P:
+ print('E',end='')
+ elif (y,x) in D:
+ print(D[(y,x)][0],end='')
+ else:
+ print('.', end='')
+ print()
+ print()
+ print()
+
+min_y, max_y, min_x, max_x = get_max(D)
+
+start_x = 1
+end_x = max_x - 1
+
+def get_next_D(D):
+ Dn = defaultdict(list)
+ for (y,x) in D:
+ for val in D[(y,x)]:
+ if val == '#':
+ Dn[(y,x)].append('#')
+
+ elif val == '>':
+ nx = x + 1
+ if nx == max_x:
+ nx = 1
+ Dn[(y,nx)].append('>')
+
+ elif val == '<':
+ nx = x - 1
+ if nx == 0:
+ nx = max_x - 1
+ Dn[(y,nx)].append('<')
+
+ elif val == 'v':
+ ny = y + 1
+ if ny == max_y:
+ ny = 1
+ Dn[(ny,x)].append('v')
+
+ elif val == '^':
+ ny = y - 1
+ if ny == 0:
+ ny = max_y - 1
+ Dn[(ny,x)].append('^')
+ return Dn
+
+def dfs(Dstart, Pstart, Pend):
+ P = Pstart
+ D = Dstart
+
+ it = 0
+ for _ in range(1000):
+ it += 1
+ Pn = set()
+
+ D = get_next_D(D)
+
+ for y,x in P:
+ for dy,dx in [0,0], [1,0], [-1,0], [0,1], [0,-1]:
+ if 0 <= y+dy <= max_y and 0 <= x+dx <= max_x:
+ if (y+dy, x+dx) not in D:
+ Pn.add((y+dy,x+dx))
+ P = Pn
+
+ # print_grid(D, P)
+ # print(P)
+
+ for (y,x) in P:
+ if (y,x) in Pend:
+ return D, it
+
+
+Pstart = set()
+Pstart.add((0,1))
+Pend = set()
+Pend.add((max_y, max_x-1))
+
+D, t1 = dfs(D, Pstart, Pend)
+D, t2 = dfs(D, Pend, Pstart)
+D, t3 = dfs(D, Pstart, Pend)
+
+res1 = t1
+res2 = t1 + t2 + t3
+
+print('res1:', res1)
+print('res2:', res2)
+
diff --git a/2022/in/day24.pzl b/2022/in/day24.pzl
new file mode 100644
index 0000000..0de5f67
--- /dev/null
+++ b/2022/in/day24.pzl
@@ -0,0 +1,22 @@
+#.######################################################################################################################################################
+#>v<<.^vvv^vv.^^>>v<>><v^<<.>^>v>v<v^vvvvvv^><^<vv<^^^v<vv>vvv.^v>.<>>v^v><<>^<<^vv<<>><<v<v<^v<..^>>vv^><<<v<^^><<<>>>vvv^.^.v>.^v^^.vv>^vv^>^^^><v<<<#
+#.<<v^><<.<>>>>^.<^<^^<>>^.^^.^v<vvv>>vv<^>.>>^^<<<^^>><^><<<v^>v.^^<.<<^v^>^^>.^.v^>.><<vv^>><>^....^<vv^><<^>v<v<^vvv<v<<><^vv<^>v^^^^^^^.^vv<^^<vvv<#
+#<>.v^.v<^><><v^^>>^><.v>^v^vv><><>>^>^v<^>>v^>^vvv^v..>vv>.^vv^<^.<.<v>>^<><v>^>^v..^>^><>vvv<v>^.>>^^<v^v>^<^vv.>.^v><v>v^>.^v<v>.<<vvv><^v^<^<^<vv<>#
+#>v..v^<^^v<><^^>vv>v^^^<^.^<<><^^^v>^<^v<<^>^<<.^><<^>>v^.v.><>>^<<><^^>>v>.^<^<vv><<>..>>v^^^>v>^<vv>.^>^<.^^v<>v>^.^>^^>.^v^>>^v>>>^<<^.^>><>v^>v>v.#
+#>^^^^^v^>>>^^v^v^v>v^v<v^.><<.^..v<^<^<^><<><<<>>v<<>><<^v^^>v>v<>.<vv>^<<<><.v<v<>>v^v<>>^v><.v>><<v><v<vv<<^^<><.^>v>^<^<^>^^.<.v>v^>>>><<<^v.vv<.<>#
+#>vv<vv^v<.<<v><<<^v>v<><vv<<vv<<.^.v>>v>.>v<^<<>v>>vv>..>v<^.v<.^<.>.<<<>>>^v>.^>>>>><<<^>..>>>^<^<>^>><>^><><v>v<<<v^.vvvv<v>>vv^>>>^.v^<>^><.<v>>v>>#
+#>>v.>><v^>v^v.<^.<vvv<<<v<>.^^v<<^^>>^^v^^.^.<>^vv^>>v<>^>v^.vv^v>.v^<>>v<<v<^>^vv^^v^><>v>.^<v<v<.^>>vvv>v^<^vv^<v^<<>^<v<>v<<v<<>v^v><>^vv^<<<^v>^>>#
+#<^<^>><<.<<.><<v>vv>v^v<<>..v<^>v^<.vv><v^<<<.v>v>>><<^.<v^vvv^<^v<<^^^^<v<<.<<^><v.<>>^><v>..<><vvv<.<>><.v>.v><<>vv<>.<<v.>><>>v<v^>^>>..>.<<^>^>^.>#
+#<v.>v>v<>>v^v>^v<^vv>^^>^vv>v<^^vv><^.<v<^<v>^>^v<v.<^<>^>>>vvvv<v>>^^<v.^v<^^<.<<<><v^<>^^<vvv><<>...^<><>^>vvv^^v..v..v^><^<>^>vv><v<^^vv^vvv>v^<v><#
+#<^^^^.>v>><<>v<vv<^<<^>v..vv^vvv>>>v<<^vv^^><^>^>^v.<<^v^^><vv>.>v..v.^v><^<^>>^>vv<<v.v>.<.>^.>>>^>>^^v^>^<.<><v>v^.^..<>.>^<^^<v.^v>^^^<<^v>>.>vv<v>#
+#>^^v>v.<v<<v..>><>..^v><>.^<v.>vv<>v^^>v.^v<<<vv>>v.^>><<^<v><v^.>>>^v>^>>v<<...<^^^vv.v^><<<>^^v<v^>v<v>.vv^vv.>>v<>><>v><vv>^>>v^..vv>v>^^>vvv>.>^v<#
+#<v>^^.<.^vv^<>^vv<<<<<vv^<^^<>v>^vv<>v<<>vv^<<v><<.^^..>.^>vv<^<>>^.<<<<<>.v>v><>.>v>v^<>^>vvv>.<^v^.>^<<v<^vvv^>v><<v^>.^><^><>v.^^<><vv<>.v..^<<v^>>#
+#<>^.>.><><v^<v>v>^<<>^v..<.<><>>^.vv>v.vv.>><>v^>.^><.<v.>v..^^v.^v^>^<^^<>>>v<^>>v<^<v^^^v<^v.vv<v^.><^^v^>^^^<.>.<v<.<v>^.><^^<v^<<^^v<.>>v>.vvv>v>>#
+#<v><v.^^<>v>.>^^^^>v<<v..v>><>v^.>^^<^>v<>v^v<v^<><^<>v>v^.<.^v^<^<>v^^<<^v><^.>^.v><><>>^v^v><.>v><<>v>v^.vvv><>^>>v^<<^v>^vv><><.^^>>vv^^v><^..>^v<>#
+#>v><^<vv^v>v><>v^<<><<^>v^v<^<^<v>><v^vv<<.vv<^v.><<<v.v.^<v<v.^^>><>^vv>v<v^>v^.<<><^<<.<vv<^.^>^^vv<^vv^..<^>^^<^^vvvv<><^^^<v<vv<v^>^v<^v><^^<..<v>#
+#>v^<<><<<^v.vvv>v<<v>>.^>^<^><..>>>^v.v.<<v<>>^^..><<v>vv^^<v<<^<>^v<^<<^.v>^<^>vv.>>>^>^^.<^<v<<^^v^^<><.>^.<><vv^<^>^>>^^vv^<^^^<^>^.v^<.<^^<.>v>v>>#
+#>^<v>v^<^>>..v<.><<<^><^v>vv<>^^v<v^vv><<<><^v<^.v<^>v<v<^<v>v>^v^^>>^<<^.<<v<vvv><^>v>^<>v>v^^>.<vv<<>>^^<>vv>^v^.><^^^vv>v<<<<v^v<vv><.<v<^v>>^v>v<>#
+#<vv^>^^<v>^v>>.^.<<^<^^.v>>vv>^<><><>>^>>>vv<.v<^<<<vvv.>v<>>^>>v<>>..>^v^>^>^v<<>v^v^.^>^v^^v>.><v<<.v<v>vv>>.<<v.v.^<>><>vv>^^>><^^.<>>>vv<<>^>><<<.#
+#<^<^^.>>>^<>^v<^v<<>v^<>^vv<^^v<v<<^^.><<vv>v^<^^<>^^^v<v>^.^^<<^v<v^.^>>>><v>><>>>><v<^^<v>v^v>^>v>v^^^<>v><v><.>><>^vvvvv>vv<<v^^<v^v>v.^v<vv<^.^^v<#
+#..>^>>^^^^v<>>^><^^v>^^>v.><>><vv<><^.<><^v.^vv<><v>v^<<v>v<vv<><>v^.^<<<vv>>^^<<>^.v<^.v^^<>>>^v<.>^..^^^<<<>..v<><v<>v<>>..<v><>^^>>.<>v<<>v>.<v^vv.#
+######################################################################################################################################################.#
diff --git a/2022/in/day24.ref b/2022/in/day24.ref
new file mode 100644
index 0000000..685dc4f
--- /dev/null
+++ b/2022/in/day24.ref
@@ -0,0 +1,6 @@
+#.######
+#>>.<^<#
+#.<..<<#
+#>v.><>#
+#<^v^^>#
+######.#