From e7c9108b95e39d7ea5a29ae06d619c4727f11027 Mon Sep 17 00:00:00 2001 From: Thomas Voss Date: Fri, 29 Oct 2021 23:02:39 +0200 Subject: Initial commit --- 2015/18/puzzle-1.py | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100755 2015/18/puzzle-1.py (limited to '2015/18/puzzle-1.py') diff --git a/2015/18/puzzle-1.py b/2015/18/puzzle-1.py new file mode 100755 index 0000000..ef6d36e --- /dev/null +++ b/2015/18/puzzle-1.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python3 + + +def neighbours(data: list[list[str]], x: int, y: int) -> int: + acc = 0 + + for x1, y1 in [ + (x - 1, y - 1), + (x - 1, y), + (x - 1, y + 1), + (x, y - 1), + (x, y + 1), + (x + 1, y - 1), + (x + 1, y), + (x + 1, y + 1), + ]: + try: + if x1 >= 0 and y1 >= 0 and data[x1][y1] == "#": + acc += 1 + except IndexError: + pass + + return acc + + +def simulate(data: list[list[str]]) -> list[list[str]]: + ndata = [["." for i in range(100)] for j in range(100)] + + for i in range(100): + for j in range(100): + if data[i][j] == "#" and neighbours(data, i, j) in [2, 3]: + ndata[i][j] = "#" + elif data[i][j] == "." and neighbours(data, i, j) == 3: + ndata[i][j] = "#" + + return ndata + +def main() -> None: + with open("input", "r", encoding="utf-8") as f: + data = [list(l.strip()) for l in f.readlines()] + + for i in range(100): + data = simulate(data) + + print(sum(data[i].count("#") for i in range(100))) + + +if __name__ == "__main__": + main() -- cgit v1.2.3