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