Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
81c7953
commit 5823a0d
Showing
1 changed file
with
82 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,82 @@ | ||
""" | ||
Problem 18 | ||
By starting at the top of the triangle below and moving to adjacent numbers | ||
on the row below, the maximum total from top to bottom is 23. | ||
3 | ||
7 4 | ||
2 4 6 | ||
8 5 9 3 | ||
That is, 3 + 7 + 4 + 9 = 23. | ||
Find the maximum total from top to bottom of the triangle below: | ||
75 | ||
95 64 | ||
17 47 82 | ||
18 35 87 10 | ||
20 04 82 47 65 | ||
19 01 23 75 03 34 | ||
88 02 77 73 07 63 67 | ||
99 65 04 28 06 16 70 92 | ||
41 41 26 56 83 40 80 70 33 | ||
41 48 72 33 47 32 37 16 94 29 | ||
53 71 44 65 25 43 91 52 97 51 14 | ||
70 11 33 28 77 73 17 78 39 68 17 57 | ||
91 71 52 38 17 14 91 43 58 50 27 29 48 | ||
63 66 04 68 89 53 67 30 73 16 69 87 40 31 | ||
04 62 98 27 23 09 70 98 73 93 38 53 60 04 23 | ||
NOTE: As there are only 16384 routes, it is possible to solve this problem | ||
by trying every route. However, Problem 67, is the same challenge with a t | ||
riangle containing one-hundred rows; it cannot be solved by brute force, and | ||
requires a clever method! ;o) | ||
""" | ||
import copy | ||
data = """\ | ||
75 | ||
95 64 | ||
17 47 82 | ||
18 35 87 10 | ||
20 04 82 47 65 | ||
19 01 23 75 03 34 | ||
88 02 77 73 07 63 67 | ||
99 65 04 28 06 16 70 92 | ||
41 41 26 56 83 40 80 70 33 | ||
41 48 72 33 47 32 37 16 94 29 | ||
53 71 44 65 25 43 91 52 97 51 14 | ||
70 11 33 28 77 73 17 78 39 68 17 57 | ||
91 71 52 38 17 14 91 43 58 50 27 29 48 | ||
63 66 04 68 89 53 67 30 73 16 69 87 40 31 | ||
04 62 98 27 23 09 70 98 73 93 38 53 60 04 23 | ||
""" | ||
def traditional(): | ||
# Initialization of data | ||
global data | ||
data = data.splitlines() | ||
data = [x.split() for x in data] | ||
|
||
# Converting string to int | ||
for i in range(len(data)): | ||
data[i] = map(int, data[i]) | ||
|
||
# Creating a answer matrix | ||
ans = copy.deepcopy(data) | ||
|
||
for i in range(len(data)-1): | ||
# Updating current matrix with answer matrix | ||
data = copy.deepcopy(ans) | ||
for j in range(len(data[i])): | ||
# Computing the left child | ||
temp = data[i][j] + data[i+1][j] | ||
ans[i+1][j] = max(ans[i+1][j], temp) | ||
|
||
# Computing the right child | ||
temp = data[i][j] + data[i+1][j+1] | ||
ans[i+1][j+1] = max(ans[i+1][j+1], temp) | ||
|
||
return max(ans[-1]) | ||
|
||
print "Answer:", traditional() |