Solved ProjectEuler/018: php, ruby

This commit is contained in:
FuryFire 2012-03-09 12:48:16 +01:00
parent 9be0bd6251
commit 6a3906b838
4 changed files with 74 additions and 0 deletions

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

@ -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

@ -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

@ -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]