finish level5/expanding-nebula #6
@ -22,3 +22,8 @@
|
|||||||
### escape-pods
|
### escape-pods
|
||||||
* Completed in: 1 day, 2 hrs, 16 mins, 11 secs.
|
* Completed in: 1 day, 2 hrs, 16 mins, 11 secs.
|
||||||
* Minimum cut
|
* Minimum cut
|
||||||
|
|
||||||
|
## Level5
|
||||||
|
### expanding-nebula
|
||||||
|
* Completed in: 6 hrs, 49 mins, 26 secs.
|
||||||
|
* DP & time complexity optimization
|
||||||
|
|||||||
@ -1,27 +1,15 @@
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
def solution(g):
|
def solution(g):
|
||||||
#print_grid(g)
|
|
||||||
grid = np.array(g)
|
grid = np.array(g)
|
||||||
#print grid
|
|
||||||
height, width = grid.shape
|
height, width = grid.shape
|
||||||
#print height, width
|
|
||||||
|
|
||||||
prev_cases = {i:1 for i in generate_prev_cases(grid[:, 0])}
|
prev_cases = {i:1 for i in generate_prev_cases(grid[:, 0])}
|
||||||
#prev_cases = {i:1 for i in range(2**(len(column)+1))}
|
|
||||||
#print prev_cases
|
|
||||||
|
|
||||||
memo = {}
|
memo = {}
|
||||||
#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):
|
for column in range(width):
|
||||||
cases = {}
|
cases = {}
|
||||||
c = list_to_int(grid[:, column])
|
c = list_to_int(grid[:, column])
|
||||||
#print grid[:,column], list_to_int(grid[:,column])
|
|
||||||
for i in prev_cases.keys():
|
for i in prev_cases.keys():
|
||||||
if not i in memo:
|
if not i in memo:
|
||||||
memo[i] = {}
|
memo[i] = {}
|
||||||
@ -32,57 +20,28 @@ def solution(g):
|
|||||||
cases[j] = 0
|
cases[j] = 0
|
||||||
if i in prev_cases:
|
if i in prev_cases:
|
||||||
cases[j] += prev_cases[i]
|
cases[j] += prev_cases[i]
|
||||||
#print cases
|
|
||||||
prev_cases = cases
|
prev_cases = cases
|
||||||
return sum(prev_cases.values())
|
return sum(prev_cases.values())
|
||||||
|
|
||||||
def generate_prev_cases(column):
|
def generate_prev_cases(column):
|
||||||
#print column
|
|
||||||
if len(column) == 0:
|
if len(column) == 0:
|
||||||
yield 0
|
yield 0
|
||||||
yield 1
|
yield 1
|
||||||
else:
|
else:
|
||||||
for v in generate_prev_cases(column[:-1]):
|
for v in generate_prev_cases(column[:-1]):
|
||||||
#print 'v', v
|
|
||||||
if column[len(column)-1] and v&1 == 1:
|
if column[len(column)-1] and v&1 == 1:
|
||||||
yield v<<1|0
|
yield v<<1|0
|
||||||
else:
|
else:
|
||||||
yield v<<1|0
|
yield v<<1|0
|
||||||
yield v<<1|1
|
yield v<<1|1
|
||||||
|
|
||||||
#for t in [[True], [False], [True, True], [True, False], [False, True], [False, False]]:
|
|
||||||
# print 'run', t, list(generate_prev_cases(t))
|
|
||||||
#exit(0)
|
|
||||||
|
|
||||||
def print_grid(g):
|
|
||||||
for row in g:
|
|
||||||
line = ""
|
|
||||||
for elem in row:
|
|
||||||
if elem:
|
|
||||||
line+="O"
|
|
||||||
else:
|
|
||||||
line+="."
|
|
||||||
print line
|
|
||||||
|
|
||||||
def calculate_c_column(i, j, length):
|
def calculate_c_column(i, j, length):
|
||||||
mask = 2**length-1
|
mask = 2**length-1
|
||||||
multiple_ones = ((i&j) | ((i&j)>>1)) & mask
|
multiple_ones = ((i&j) | ((i&j)>>1)) & mask
|
||||||
odd_ones = ((i^j) ^ ((i^j)>>1)) & mask
|
odd_ones = ((i^j) ^ ((i^j)>>1)) & mask
|
||||||
single_one = (~multiple_ones & odd_ones) & mask
|
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
|
return single_one
|
||||||
|
|
||||||
#l=3
|
|
||||||
#memo = {}
|
|
||||||
#for i in range(2**(l-1)):
|
|
||||||
# memo[i] = 0
|
|
||||||
#for i in range(2**l):
|
|
||||||
# for j in range(2**l):
|
|
||||||
# t = calculate_c_column(i, j, l)
|
|
||||||
# memo[t] += 1
|
|
||||||
#print memo
|
|
||||||
#exit(0)
|
|
||||||
|
|
||||||
def list_to_int(l):
|
def list_to_int(l):
|
||||||
value = 0
|
value = 0
|
||||||
for v in l:
|
for v in l:
|
||||||
@ -100,7 +59,8 @@ tests = [
|
|||||||
([[True, False]], 10),
|
([[True, False]], 10),
|
||||||
([[False, True]], 10),
|
([[False, True]], 10),
|
||||||
([[False, False]], 38),
|
([[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),
|
# to test time consumption, the answer is not correct
|
||||||
|
([[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:
|
for (i, o) in tests:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user