From 0500c95614d1c8addb029013f6161750eaa24902 Mon Sep 17 00:00:00 2001 From: Seongbeom Park Date: Sun, 6 Mar 2022 05:04:53 +0900 Subject: [PATCH] WIP: changing algorithm from linear to divide and conquer --- .../{readme.md => readme.txt} | 0 others/dodge-the-lasers/solution.py | 65 ++++++++++++++++++- 2 files changed, 64 insertions(+), 1 deletion(-) rename others/dodge-the-lasers/{readme.md => readme.txt} (100%) diff --git a/others/dodge-the-lasers/readme.md b/others/dodge-the-lasers/readme.txt similarity index 100% rename from others/dodge-the-lasers/readme.md rename to others/dodge-the-lasers/readme.txt diff --git a/others/dodge-the-lasers/solution.py b/others/dodge-the-lasers/solution.py index 1effa86..f51436e 100644 --- a/others/dodge-the-lasers/solution.py +++ b/others/dodge-the-lasers/solution.py @@ -1,2 +1,65 @@ +import math +from decimal import * + +getcontext().prec = 102 +sqrt_2 = Decimal(2).sqrt() + def solution(s): - # Your code here + total = 0 + for i in range(int(s)+1): + total += int(math.floor(i*sqrt_2)) + #print i, total + return str(total) + +def check_known_pattern(start, end, memo): + if '0'*(end-start+1) in memo: # TODO: checkk value in the memo + return '0'*(end-start+1) + return False + +def generate_dfs(start, end, memo): + pattern = check_known_pattern(start, end, memo) + if pattern: + yield pattern, memo[pattern] + else: + new_pattern = '' + new_value = 0 # TODO: calculate new_value + pivot = int(math.floor((start+end)/2)) # TODO: power of 2 is optimal + for pattern, value in generate_dfs(start, pivot, memo): + new_pattern += pattern + new_value += value + yield pattern, value + for pattern, value in generate_dfs(pivot + 1, end, memo): + new_pattern += pattern + new_value += value + yield pattern, value + memo[new_pattern] = new_value + +memo = {'0': 1, '1': 1} # TODO: upgrade memo +total = 0 +for pattern, value in generate_dfs(1, 5, memo): + total += value + print pattern, value +print total, memo + +exit(0) + + + +tests = [ + ['77', '4208'], + ['1', '1'], + ['2', '3'], + ['3', '7'], + ['4', '12'], + ['5', '19'], + ['6', '27'], + ['7', '36'], + ['8', '47'], + ['9', '59'], + ['10', '73'], + ] + + +for test in tests: + result = solution(test[0]) + print(test[0], result == test[1], result, test[1])