Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.forth > #53950 > unrolled thread
| Started by | "Robert L." <No_spamming@noWhere_7073.org> |
|---|---|
| First post | 2017-01-12 06:21 +0000 |
| Last post | 2017-01-12 11:14 +0100 |
| Articles | 2 — 2 participants |
Back to article view | Back to comp.lang.forth
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
| From | "Robert L." <No_spamming@noWhere_7073.org> |
|---|---|
| Date | 2017-01-12 06:21 +0000 |
| Subject | Project 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]
| From | Melzzzzz <mel@zzzzz.com> |
|---|---|
| Date | 2017-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