2016: d18: ex1: add solution
This commit is contained in:
parent
a126c036f1
commit
5bf73d5948
1 changed files with 41 additions and 0 deletions
41
2016/d18/ex1/ex1.py
Executable file
41
2016/d18/ex1/ex1.py
Executable file
|
|
@ -0,0 +1,41 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
def solve(input: str) -> int:
|
||||||
|
def parse(input: str) -> set[int]:
|
||||||
|
return {i for i, c in enumerate(input.strip()) if c == "^"}
|
||||||
|
|
||||||
|
def is_trap(tile: int, traps: set[int]) -> bool:
|
||||||
|
match ((tile - 1) in traps, tile in traps, (tile + 1) in traps):
|
||||||
|
case (True, True, False):
|
||||||
|
return True
|
||||||
|
case (False, True, True):
|
||||||
|
return True
|
||||||
|
case (True, False, False):
|
||||||
|
return True
|
||||||
|
case (False, False, True):
|
||||||
|
return True
|
||||||
|
case _:
|
||||||
|
return False
|
||||||
|
|
||||||
|
def step_row(traps: set[int], row_length: int) -> set[int]:
|
||||||
|
return {i for i in range(row_length) if is_trap(i, traps)}
|
||||||
|
|
||||||
|
traps = parse(input)
|
||||||
|
row_length = len(input.strip())
|
||||||
|
safe_tiles = row_length - len(traps)
|
||||||
|
for _ in range(40 - 1):
|
||||||
|
traps = step_row(traps, row_length)
|
||||||
|
safe_tiles += row_length - len(traps)
|
||||||
|
return safe_tiles
|
||||||
|
|
||||||
|
|
||||||
|
def main() -> None:
|
||||||
|
input = sys.stdin.read()
|
||||||
|
print(solve(input))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
Loading…
Add table
Add a link
Reference in a new issue