Solved ProjectEuler/018: php, ruby
This commit is contained in:
23
ProjectEuler/018/desc.yml
Normal file
23
ProjectEuler/018/desc.yml
Normal file
@ -0,0 +1,23 @@
|
||||
title: Find the maximum sum travelling from the top of the triangle to the base.
|
||||
url: http://projecteuler.net/problem=18
|
||||
|
||||
desc: |
|
||||
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
|
||||
(See file input)
|
||||
|
||||
|
||||
solution: Instead of bruteforcing from top to bottom simply add the numbers from the bottom up and let the "highest" number win in a shootout
|
||||
|
||||
solutions:
|
||||
solve.php:
|
||||
desc: Basic solution
|
||||
language: php
|
||||
solve.rb:
|
||||
desc: Basic solution
|
||||
language: ruby
|
15
ProjectEuler/018/input
Normal file
15
ProjectEuler/018/input
Normal file
@ -0,0 +1,15 @@
|
||||
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
|
16
ProjectEuler/018/solve.php
Normal file
16
ProjectEuler/018/solve.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
foreach(file('php://stdin') as $line) {
|
||||
$tri[] = explode(' ',trim($line));
|
||||
}
|
||||
for($y=count($tri);$y>=0;$y--) {
|
||||
|
||||
for($x=0;$x<count($tri[$y]);$x++) {
|
||||
$cur = $tri[$y][$x];
|
||||
if($cur + $tri[$y+1][$x] > $cur + $tri[$y+1][$x+1]) {
|
||||
$tri[$y][$x] = $cur + $tri[$y+1][$x];
|
||||
} else {
|
||||
$tri[$y][$x] = $cur + $tri[$y+1][$x+1];
|
||||
}
|
||||
}
|
||||
}
|
||||
echo $tri[0][0];
|
20
ProjectEuler/018/solve.rb
Normal file
20
ProjectEuler/018/solve.rb
Normal file
@ -0,0 +1,20 @@
|
||||
tri = []
|
||||
linenum = 0
|
||||
ARGF.lines("\n") do |line|
|
||||
tri[linenum] = Array.new
|
||||
line.split.each do |str|
|
||||
tri[linenum] << str.to_i
|
||||
end
|
||||
linenum += 1
|
||||
end
|
||||
|
||||
(0..13).reverse_each do |y|
|
||||
0.upto(tri[y].size()-1) do |x|
|
||||
if( tri[y+1][x] > tri[y+1][x+1])
|
||||
tri[y][x] = tri[y][x] + tri[y+1][x]
|
||||
else
|
||||
tri[y][x] = tri[y][x] + tri[y+1][x+1]
|
||||
end
|
||||
end
|
||||
end
|
||||
puts tri[0][0]
|
Reference in New Issue
Block a user