diff options
| author | nekineki <nekineki@nekineki.net> | 2022-12-24 07:04:33 +0100 |
|---|---|---|
| committer | nekineki <nekineki@nekineki.net> | 2022-12-24 07:04:33 +0100 |
| commit | 1addc1ee10820384de416d30a0b9be595f7dc648 (patch) | |
| tree | a5f4bdd5eaa99148d9ce032b1b4b4918c2845a0c /2022 | |
| parent | 8e2fb68df01c1d6145602c52f88632a8e19bb813 (diff) | |
day24
Diffstat (limited to '2022')
| -rwxr-xr-x | 2022/day24.py | 125 | ||||
| -rw-r--r-- | 2022/in/day24.pzl | 22 | ||||
| -rw-r--r-- | 2022/in/day24.ref | 6 |
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^^># +######.# |
