From 6064f8520024f0b4d4e76ee0d8d6eca122997f21 Mon Sep 17 00:00:00 2001 From: tebarius Date: Thu, 19 Dec 2024 14:34:40 +0100 Subject: [PATCH] 19-2 --- 19/19-1-1.py | 1 - 19/19-1.py | 1 - 19/19-2.py | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 19/19-2.py diff --git a/19/19-1-1.py b/19/19-1-1.py index 63cabc2..2fda513 100644 --- a/19/19-1-1.py +++ b/19/19-1-1.py @@ -38,7 +38,6 @@ def check_design(txt: str) -> bool: if __name__ == "__main__": alphabet, designs = read_input(file) - alphabet.sort(reverse=True) sol = 0 for i, design in enumerate(designs): #print(i, design) diff --git a/19/19-1.py b/19/19-1.py index af1ece2..ed4b889 100644 --- a/19/19-1.py +++ b/19/19-1.py @@ -48,7 +48,6 @@ def check_design(txt: str) -> bool: if __name__ == "__main__": alphabet, designs = read_input(file) - alphabet.sort(reverse=True) sol = 0 for i, design in enumerate(designs): #print(i, design) diff --git a/19/19-2.py b/19/19-2.py new file mode 100644 index 0000000..6010a89 --- /dev/null +++ b/19/19-2.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +from functools import lru_cache + +file = "./input.txt" +#file = "./ex.txt" +#file = "./input-e.txt" +from time import time +start_time = time() + +def read_input(input_file:str, ) -> tuple[list[str], list[str]]: + a = [] + d = [] + f = open(input_file, "r") + for line in f: + line = line.strip() + if line == "": + continue + elif "," in line: + a = line.replace(" ","").split(",") + else: + d.append(line) + f.close() + return a, d + +@lru_cache(maxsize=None) +def count_designs(txt: str) -> int: + global alphabet + if txt == "": + return 1 + total = 0 + for substring in alphabet: + if txt.startswith(substring): + remaining = txt[len(substring):] + total += count_designs(remaining) + return total + + + +if __name__ == "__main__": + alphabet, designs = read_input(file) + sol = 0 + for i, design in enumerate(designs): + x = count_designs(design) + print(i, design, x) + sol += x + print(sol) + + print(f'Runtime: {time()-start_time:.8f} s') \ No newline at end of file