diff options
Diffstat (limited to 'challenge-075/lubos-kolouch/python')
| -rw-r--r-- | challenge-075/lubos-kolouch/python/ch-1.py | 21 | ||||
| -rw-r--r-- | challenge-075/lubos-kolouch/python/ch-2.py | 62 |
2 files changed, 83 insertions, 0 deletions
diff --git a/challenge-075/lubos-kolouch/python/ch-1.py b/challenge-075/lubos-kolouch/python/ch-1.py new file mode 100644 index 0000000000..c706f7f5a0 --- /dev/null +++ b/challenge-075/lubos-kolouch/python/ch-1.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python +""" Perl weekly challenge 075 Task 1 - Coins sum """ + + +def count(coins, target_sum): + """ count the ways we can sum coins """ + + ways = [0] * (target_sum + 1) + + ways[0] = 1 + + for value in coins: + for j, _ in enumerate(ways): + if value <= j: + ways[j] += ways[j - value] + + return ways[target_sum] + + +assert count([1, 2, 4], 6) == 6 +assert count([1, 5, 10], 12) == 4 diff --git a/challenge-075/lubos-kolouch/python/ch-2.py b/challenge-075/lubos-kolouch/python/ch-2.py new file mode 100644 index 0000000000..306bcae7c3 --- /dev/null +++ b/challenge-075/lubos-kolouch/python/ch-2.py @@ -0,0 +1,62 @@ +#!/usr/bin/env python +""" Perl Weekly challenge 075 Task 2 - Largest histogram """ + + +def printHistogram(histogram): + """ print the histogram """ + + hist_max = max(histogram) + + for i in range(hist_max, 0, -1): + my_str = str(i) + + for bar in histogram: + my_str += '#' if bar >= i else ' ' + + print(my_str) + + my_str = '_' + for _ in histogram: + my_str += '_' + + print(my_str) + + my_str = ' ' + for item in histogram: + my_str += str(item) + + print(my_str) + +def largestRectangle(histogram): + stack = list() + max_area = 0 + index = 0 + + while index < len(histogram): + if (not stack) or (histogram[stack[-1]] <= histogram[index]): + stack.append(index) + index += 1 + else: + top_of_stack = stack.pop() + area = (histogram[top_of_stack] * ((index - stack[-1] - 1) + if stack else index)) + + max_area = max(max_area, area) + + while stack: + + top_of_stack = stack.pop() + + area = (histogram[top_of_stack] * ((index - stack[-1] - 1) + if stack else index)) + + max_area = max(max_area, area) + + printHistogram(histogram) + + return max_area + + +assert largestRectangle([2, 1, 4, 5, 3, 7]) == 12 +assert largestRectangle([3, 2, 3, 5, 7, 5]) == 15 + |
