Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.forth > #53950 > unrolled thread

Project Euler 18.

Started by"Robert L." <No_spamming@noWhere_7073.org>
First post2017-01-12 06:21 +0000
Last post2017-01-12 11:14 +0100
Articles 2 — 2 participants

Back to article view | Back to comp.lang.forth


Contents

  Project Euler 18. "Robert L." <No_spamming@noWhere_7073.org> - 2017-01-12 06:21 +0000
    Re: Project Euler 18. Melzzzzz <mel@zzzzz.com> - 2017-01-12 11:14 +0100

#53950 — Project Euler 18.

From"Robert L." <No_spamming@noWhere_7073.org>
Date2017-01-12 06:21 +0000
SubjectProject Euler 18.
Message-ID<o5779i$bcp$1@gioia.aioe.org>
Find the maximum total from top to bottom of the triangle below:

Ruby:

triangle =
  "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".
  each_line.map{|line| line.scan( /\d+/ ).map &:to_i}

$max_total = 0
def maximize( sum, column, delta, (row,*rest) )
  if !row
    $max_total = [$max_total, sum].max
  else
    column.upto(column + delta){|i| maximize(sum + row[i], i, 1, rest)}
  end
end
maximize(0,0,0,triangle)
$max_total

 ===>
1074

In Forth?


-- 
Use this [sword] for me, if I rule well; if not, against me. --- Trajan
"If a government uses the instruments of power in its hands for the purpose of
leading a people to ruin, then rebellion is not only the right but also the
duty of every individual citizen."

[toc] | [next] | [standalone]


#53952

FromMelzzzzz <mel@zzzzz.com>
Date2017-01-12 11:14 +0100
Message-ID<20170112111406.7ef47ed5@maxa-pc>
In reply to#53950
On Thu, 12 Jan 2017 06:21:39 +0000 (UTC)
"Robert L." <No_spamming@noWhere_7073.org> wrote:

> Find the maximum total from top to bottom of the triangle below:
> 
> Ruby:
> 
> triangle =
>   "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".
>   each_line.map{|line| line.scan( /\d+/ ).map &:to_i}
> 
> $max_total = 0
> def maximize( sum, column, delta, (row,*rest) )
>   if !row
>     $max_total = [$max_total, sum].max
>   else
>     column.upto(column + delta){|i| maximize(sum + row[i], i, 1,
> rest)} end
> end
> maximize(0,0,0,triangle)
> $max_total
> 
>  ===>  
> 1074
> 
> In Forth?
> 
> 

https://projecteuler.net/problem=67
NOTE: This is a much more difficult version of Problem 18. It is not
possible to try every route to solve this problem, as there are 299
altogether! If you could check one trillion (1012) routes every second
it would take over twenty billion years to check them all. There is an
efficient algorithm to solve it. ;o)

-- 
press any key to continue or any other to quit...

[toc] | [prev] | [standalone]


Back to top | Article view | comp.lang.forth


csiph-web