finish level5/expanding-nebula #6
@ -8,25 +8,26 @@ def solution(g):
|
||||
#print height, width
|
||||
|
||||
memo = {}
|
||||
prev_cases = {}
|
||||
for i in range(2**(height+1)):
|
||||
prev_cases[i] = 1
|
||||
memo[i] = {}
|
||||
for j in range(2**(height+1)):
|
||||
memo[i][j] = calculate_c_column(i, j, height)
|
||||
prev_cases = {i:1 for i in range(2**(height+1))}
|
||||
#for i in range(2**(height+1)):
|
||||
# prev_cases[i] = 1
|
||||
# memo[i] = {j:calculate_c_column(i, j, height) for j in range(2**(height+1))}
|
||||
#print memo
|
||||
|
||||
#print prev_cases
|
||||
for column in range(width):
|
||||
cases = {}
|
||||
for i in range(2**(height+1)):
|
||||
cases[i] = 0
|
||||
c = list_to_int(grid[:,column])
|
||||
#print grid[:,column], list_to_int(grid[:,column])
|
||||
for i in range(2**(height+1)):
|
||||
if prev_cases[i] == 0:
|
||||
continue
|
||||
for j in range(2**(height+1)):
|
||||
if memo[i][j] == list_to_int(grid[:,column]):
|
||||
for i in prev_cases.keys():
|
||||
if not i in memo:
|
||||
memo[i] = {}
|
||||
if not c in memo[i]:
|
||||
memo[i][c] = [j for j in range(2**(height+1)) if calculate_c_column(i, j, height) == c]
|
||||
for j in memo[i][c]:
|
||||
if not j in cases:
|
||||
cases[j] = 0
|
||||
if i in prev_cases:
|
||||
cases[j] += prev_cases[i]
|
||||
#print cases
|
||||
prev_cases = cases
|
||||
@ -43,11 +44,11 @@ def print_grid(g):
|
||||
print line
|
||||
|
||||
def calculate_c_column(i, j, length):
|
||||
mask = 2**(length)-1
|
||||
multi_ones = ((i&j)|((i&j)>>1)) & mask
|
||||
mask = 2**length-1
|
||||
multiple_ones = ((i&j)|((i&j)>>1)) & mask
|
||||
odd_ones = ((i^j)^((i^j)>>1)) & mask
|
||||
single_one = (~multi_ones & odd_ones) & mask
|
||||
#print ' '.join(('{:0'+str(length)+'b}').format(k) for k in [i, j]), ' '.join(('{:0'+str(length-1)+'b}').format(k) for k in [multi_ones, odd_ones, single_one])
|
||||
single_one = (~multiple_ones & odd_ones) & mask
|
||||
#print ' '.join(('{:0'+str(length)+'b}').format(k) for k in [i, j]), ' '.join(('{:0'+str(length-1)+'b}').format(k) for k in [multiple_ones, odd_ones, single_one])
|
||||
return single_one
|
||||
|
||||
#l=3
|
||||
@ -78,6 +79,7 @@ tests = [
|
||||
([[True, False]], 10),
|
||||
([[False, True]], 10),
|
||||
([[False, False]], 38),
|
||||
#([[True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False], [False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False]], 1),
|
||||
]
|
||||
|
||||
for (i, o) in tests:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user