Roderic Day 1 anno fa
parent
commit
641b726b17
2 ha cambiato i file con 41 aggiunte e 1 eliminazioni
  1. +1
    -1
      VERSION
  2. +40
    -0
      y2023/p16.py

+ 1
- 1
VERSION Vedi File

@@ -1 +1 @@
🐶

+ 40
- 0
y2023/p16.py Vedi File

@@ -0,0 +1,40 @@
def reflect(pos, dirx):
match '-' if dirx.real else '|', graph.get(pos, ' '):
case [_, ' ']: return []
case [_, '.']: return [0]
case ['-', '-']: return [0]
case ['-', 'L']: return [1]
case ['-', '/']: return [-1]
case ['-', '|']: return [1, -1]
case ['|', '|']: return [0]
case ['|', '/']: return [1]
case ['|', 'L']: return [-1]
case ['|', '-']: return [1, -1]
case other: raise RuntimeError(other)


def solve(start):
seen = set()
state = {start}
while state:
seen |= state
state = {(pp + dd * 1j ** rr, dd * 1j ** rr) for pp, dd in state for rr in reflect(pp, dd)} - seen
return len({x for x, y in seen} & set(graph))


text = open(0).read().replace('\\', 'L')
graph = {
complex(x, y): val
for y, row in enumerate(text.splitlines())
for x, val in enumerate(row)
}
print(solve((0, 1)))

xmin, *_, xmax = sorted(int(p.real) for p in graph)
ymin, *_, ymax = sorted(int(p.imag) for p in graph)
starts = []
starts += [(complex(x, ymin), 1j) for x in range(xmin, xmax + 1)]
starts += [(complex(x, ymax),-1j) for x in range(xmin, xmax + 1)]
starts += [(complex(xmin, y), 1 ) for y in range(ymin, ymax + 1)]
starts += [(complex(xmax, y),-1 ) for y in range(ymin, ymax + 1)]
print(max(solve(start) for start in starts))

Loading…
Annulla
Salva