diff --git a/level5/expanding-nebula/solution.py b/level5/expanding-nebula/solution.py index b70b650..deda8db 100644 --- a/level5/expanding-nebula/solution.py +++ b/level5/expanding-nebula/solution.py @@ -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: