32 lines
2.1 KiB
Rexx
32 lines
2.1 KiB
Rexx
/*REXX program finds the maximum sum of a path of numbers in a pyramid of numbers. */
|
|
@.=.; @.1 = 55
|
|
@.2 = 94 48
|
|
@.3 = 95 30 96
|
|
@.4 = 77 71 26 67
|
|
@.5 = 97 13 76 38 45
|
|
@.6 = 07 36 79 16 37 68
|
|
@.7 = 48 07 09 18 70 26 06
|
|
@.8 = 18 72 79 46 59 79 29 90
|
|
@.9 = 20 76 87 11 32 07 07 49 18
|
|
@.10 = 27 83 58 35 71 11 25 57 29 85
|
|
@.11 = 14 64 36 96 27 11 58 56 92 18 55
|
|
@.12 = 02 90 03 60 48 49 41 46 33 36 47 23
|
|
@.13 = 92 50 48 02 36 59 42 79 72 20 82 77 42
|
|
@.14 = 56 78 38 80 39 75 02 71 66 66 01 03 55 72
|
|
@.15 = 44 25 67 84 71 67 11 61 40 57 58 89 40 56 36
|
|
@.16 = 85 32 25 85 57 48 84 35 47 62 17 01 01 99 89 52
|
|
@.17 = 06 71 28 75 94 48 37 10 23 51 06 48 53 18 74 98 15
|
|
@.18 = 27 02 92 23 08 71 76 84 15 52 92 63 81 10 44 10 69 93
|
|
#.=0
|
|
do r=1 while @.r\==. /*build another version of the pyramid.*/
|
|
do k=1 for r; #.r.k=word(@.r, k) /*assign a number to an array number. */
|
|
end /*k*/
|
|
end /*r*/
|
|
|
|
do r=r-1 by -1 to 2; p=r-1 /*traipse through the pyramid rows. */
|
|
do k=1 for p; _=k+1 /*re─calculate the previous pyramid row*/
|
|
#.p.k=max(#.r.k, #.r._) + #.p.k /*replace the previous number. */
|
|
end /*k*/
|
|
end /*r*/
|
|
/*stick a fork in it, we're all done. */
|
|
say 'maximum path sum: ' #.1.1 /*show the top (row 1) pyramid number. */
|