2023 dec 12th
This commit is contained in:
parent
1233f19712
commit
8a2c451747
1 changed files with 56 additions and 0 deletions
56
Python/2023/12/main.py
Normal file
56
Python/2023/12/main.py
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
import math
|
||||
|
||||
input = open("input", 'r')
|
||||
|
||||
data = []
|
||||
|
||||
for i, line in enumerate(input):
|
||||
line = line.rstrip()
|
||||
springs, groups = line.split(" ")
|
||||
data.append((springs + ".", [int(v) for v in groups.split(",")]))
|
||||
|
||||
arrangements = []
|
||||
|
||||
SS = {}
|
||||
def getArrangements(springs, groups, spring, group, length):
|
||||
if spring == len(springs):
|
||||
if group == len(groups): # Valid solution
|
||||
return 1
|
||||
return 0
|
||||
|
||||
pos = (spring, group, length)
|
||||
if pos in SS:
|
||||
return SS[pos]
|
||||
|
||||
arrangements = 0
|
||||
if springs[spring]=="." or springs[spring]=="?":
|
||||
if length == 0:
|
||||
arrangements += getArrangements(springs, groups, spring+1,
|
||||
group, length)
|
||||
elif group < len(groups) and groups[group] == length:
|
||||
arrangements += getArrangements(springs, groups, spring+1,
|
||||
group+1, 0)
|
||||
if springs[spring]=="#" or springs[spring]=="?":
|
||||
arrangements += getArrangements(springs, groups, spring+1,
|
||||
group, length+1)
|
||||
SS[pos] = arrangements
|
||||
return arrangements
|
||||
|
||||
for springs, groups in data:
|
||||
arrangements.append(getArrangements(springs, groups, 0, 0, 0))
|
||||
SS = {}
|
||||
|
||||
print(sum(arrangements))
|
||||
|
||||
data2 = [("?".join([springs[:-1]] * 5) + ".", groups * 5)
|
||||
for springs, groups in data]
|
||||
|
||||
print(data2[0])
|
||||
|
||||
arrangements = []
|
||||
|
||||
for springs, groups in data2:
|
||||
arrangements.append(getArrangements(springs, groups, 0, 0, 0))
|
||||
SS = {}
|
||||
|
||||
print(sum(arrangements))
|
||||
Loading…
Add table
Add a link
Reference in a new issue