19-1
This commit is contained in:
59
19/19-1.py
Normal file
59
19/19-1.py
Normal file
@@ -0,0 +1,59 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
#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
|
||||
|
||||
def check_design(txt: str) -> bool:
|
||||
global alphabet
|
||||
memo = {}
|
||||
|
||||
def check(remaining: str) -> bool:
|
||||
if remaining == "":
|
||||
return True
|
||||
|
||||
if remaining in memo:
|
||||
return memo[remaining]
|
||||
|
||||
for substring in alphabet:
|
||||
if remaining.startswith(substring):
|
||||
if check(remaining[len(substring):]):
|
||||
memo[remaining] = True
|
||||
return True
|
||||
|
||||
memo[remaining] = False
|
||||
return False
|
||||
|
||||
return check(txt)
|
||||
|
||||
|
||||
|
||||
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')
|
||||
Reference in New Issue
Block a user