From 1addc1ee10820384de416d30a0b9be595f7dc648 Mon Sep 17 00:00:00 2001 From: nekineki Date: Sat, 24 Dec 2022 07:04:33 +0100 Subject: day24 --- 2022/day24.py | 125 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2022/in/day24.pzl | 22 ++++++++++ 2022/in/day24.ref | 6 +++ 3 files changed, 153 insertions(+) create mode 100755 2022/day24.py create mode 100644 2022/in/day24.pzl create mode 100644 2022/in/day24.ref 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<^vvv.^v>.<>>v^v><<>^<<^vv<<>><>vv^><<<<<>>>vvv^.^.v>.^v^^.vv>^vv^>^^^><<.<>>>>^.<^<^^<>>^.^^.^v>vv<^>.>>^^<<<^^>><^><<v.^^<.<<^v^>^^>.^.v^>.><><>^....^<<^>v<^vv<^>v^^^^^^^.^vv<^^.v^.v<^><>>^><.v>^v^vv><><>>^>^v<^>>v^>^vvv^v..>vv>.^vv^<^.<.>^<>^>^v..^>^><>vvv^.>>^^^<^vv.>.^v>v^>.^v.<<^v^<^<^# +#>v..v^<^^v<><^^>vv>v^^^<^.^<<><^^^v>^<^v<<^>^<<.^><<^>>v^.v.><>>^<<><^^>>v>.^<^<<>..>>v^^^>v>^.^>^<.^^v<>v>^.^>^^>.^v^>>^v>>>^<<^.^>><>v^>v>v.# +#>^^^^^v^>>>^^v^v^v>v^v<<.^..v<^<^<^><<><<<>>v<<>><<^v^^>v>v<>.^<<<><.v>v^v<>>^v><.v>><<.^>v>^<^<^>^^.<.v>v^>>>><<<^v.vv<.<># +#>vv<<<^v>v<>>v>.>v<^<<>v>>vv>..>v<^.v<.^<.>.<<<>>>^v>.^>>>>><<<^>..>>>^<^<>^>><>^><>v<<>vv^>>>^.v^<>^><.>v>># +#>>v.>>v^v.<^..^^v<<^^>>^^v^^.^.<>^vv^>>v<>^>v^.vv^v>.v^<>>v<^vv^^v^><>v>.^>vvv>v^<^vv^^v<v^v><>^vv^<<<^v>^>># +#<^<^>><<.<<.><vv>v^v<<>..v<^>v^<.vv>v>>><<^.>^>..<>><.v>.v><<>vv<>.<><>>v^>>..>.<<^>^>^.># +#v>v<>>v^v>^v<^vv>^^>^vv>v<^^vv><^.^>^v^>>>vvvv>^^^^<<>...^<><>^>vvv^^v..v..v^><^<>^>vv>v^<# +#<^^^^.>v>><<>vv..vv^vvv>>>v<<^vv^^><^>^>^v.<<^v^^>.>v..v.^v><^<^>>^>vv<.<.>^.>>>^>>^^v^>^<.<>v^.^..<>.>^<^^^^^<<^v>>.>vv# +#>^^v>v.><>..^v><>.^vv<>v^^>v.^v<<>v.^>><<^>>^v>^>>v<<...<^^^vv.v^><<<>^^vv.vv^vv.>>v<>><>v>^>>v^..vv>v>^^>vvv>.>^v<# +#^^.<.^vv^<>^vv<<<<v>^vv<>v<<>vv^<<<.^^..>.^>vv<^<>>^.<<<<<>.v>v><>.>v>v^<>^>vvv>.<^v^.>^<v><.^><^><>v.^^<>.v..^<># +#<>^.>.><>v>^<<>^v..<.<><>>^.vv>v.vv.>><>v^>.^><.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^.vvv><>^>>v^<<^v>^vv><><.^^>>vv^^v><^..>^v<># +#>v><^v><>v^<<><<^>v^v<^<^><<><>^vv>vv^.<<><^<<.^^vv<^vv^..<^>^^<^^vvvv<><^^^^v<^v><^^<..# +#>v^<<><<<^v.vvv>v<>.^>^<^><..>>>^v.v.<>^^..><vv^^^v<^<<^.v>^<^>vv.>>>^>^^.<^<.>^.<>^>>^^vv^<^^^<^>^.v^<.<^^<.>v>v>># +#>^v^<^>>..v<.><<<^><^v>vv<>^^v<<<><^v<^.v<^>vv>^v^^>>^<<^.<<^>v>^<>v>v^^>.>^^<>vv>^v^.><^^^vv>v<<<<.>^v>v<># +#^^^v>>.^.<<^<^^.v>>vv>^<><><>>^>>>vv<.v<^<<v<>>^>>v<>>..>^v^>^>^v<<>v^v^.^>^v^^v>.>vv>>.<><>vv>^^>><^^.<>>>vv<<>^>><<<.# +#<^<^^.>>>^<>^v<^v<<>v^<>^vv<^^v<v^<^^<>^^^v^.^^<<^v>>>><>>>>v^v>^>v>v^^^<>v><.>><>^vvvvv>vv<v.^v^>>^^^^v<>>^><^^v>^^>v.><>><^.<><^v.^vv<>v^<v<>v^.^<<>^^<<>^.v<^.v^^<>>>^v<.>^..^^^<<<>..v<>v<>>..<>^^>>.<>v<<>v>.>.<^<# +#.<..<<# +#>v.><># +#<^v^^># +######.# -- cgit v1.2.3