From 2a461d9771d423a973d0100059f7b473230a2790 Mon Sep 17 00:00:00 2001 From: Seongbeom Park Date: Sat, 19 Feb 2022 04:49:31 +0900 Subject: [PATCH] finish level5/expanding-nebula --- README.md | 5 +++ level5/expanding-nebula/solution.py | 52 ++++------------------------- 2 files changed, 11 insertions(+), 46 deletions(-) diff --git a/README.md b/README.md index 73c6c5f..14b3716 100644 --- a/README.md +++ b/README.md @@ -22,3 +22,8 @@ ### escape-pods * Completed in: 1 day, 2 hrs, 16 mins, 11 secs. * Minimum cut + +## Level5 +### expanding-nebula +* Completed in: 6 hrs, 49 mins, 26 secs. +* DP & time complexity optimization diff --git a/level5/expanding-nebula/solution.py b/level5/expanding-nebula/solution.py index f2b2521..9e787a3 100644 --- a/level5/expanding-nebula/solution.py +++ b/level5/expanding-nebula/solution.py @@ -1,27 +1,15 @@ import numpy as np def solution(g): - #print_grid(g) grid = np.array(g) - #print grid 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 range(2**(len(column)+1))} - #print prev_cases - + prev_cases = {i:1 for i in generate_prev_cases(grid[:, 0])} 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): cases = {} - c = list_to_int(grid[:,column]) - #print grid[:,column], list_to_int(grid[:,column]) + c = list_to_int(grid[:, column]) for i in prev_cases.keys(): if not i in memo: memo[i] = {} @@ -32,57 +20,28 @@ def solution(g): cases[j] = 0 if i in prev_cases: cases[j] += prev_cases[i] - #print cases prev_cases = cases return sum(prev_cases.values()) def generate_prev_cases(column): - #print column if len(column) == 0: yield 0 yield 1 else: for v in generate_prev_cases(column[:-1]): - #print 'v', v if column[len(column)-1] and v&1 == 1: yield v<<1|0 else: yield v<<1|0 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): mask = 2**length-1 - multiple_ones = ((i&j)|((i&j)>>1)) & mask - odd_ones = ((i^j)^((i^j)>>1)) & mask + multiple_ones = ((i&j) | ((i&j)>>1)) & mask + odd_ones = ((i^j) ^ ((i^j)>>1)) & 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 -#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): value = 0 for v in l: @@ -100,7 +59,8 @@ 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), + # 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: