#!/usr/bin/env python3 import sys import functools input_file = sys.argv[1] with open(input_file) as fd: lines = [line.rstrip() for line in fd.readlines()] towels = set(map(str.strip, lines[0].split(","))) patterns = lines[2:] @functools.cache def possible(pattern: str) -> int: if not pattern: return 1 possible_count = 0 for towel in towels: if pattern.startswith(towel): possible_count += possible(pattern[len(towel) :]) return possible_count possible_count = 0 for pattern in patterns: res = possible(pattern) print(27, pattern, res) possible_count += res print(possible_count)