#!/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 check_design(txt: str) -> bool: global alphabet if txt == "": return True for substring in alphabet: if txt.startswith(substring): remaining = txt[len(substring):] if check_design(remaining): return True return False if __name__ == "__main__": alphabet, designs = read_input(file) alphabet.sort(reverse=True) sol = 0 for i, design in enumerate(designs): #print(i, design) if check_design(design): sol += 1 print(sol) print(f'Runtime: {time()-start_time:.8f} s')