- #!/usr/bin/perl
-
- use strict;
- use warnings;
- use grid;
-
- my $s;
-
- $s = "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";
-
- my @tri = split(/\s/, $s);
- my $g = new grid(20, 20, 0);
-
- my $count = 0;
- my $k = 0;
- my $holder = 0;
-
- sub solve_grid {
- my $g = shift;
- my ($h, $w) = ($g->get_height(), $g->get_width());
- my ($k, $v, $l, $r);
-
- for ($h-=2; $h+1; $h--) {
- for $k (0..$w-1) {
- $v = $g->get($k, $h);
- $l = $g->get($k, $h+1);
- $r = $g->get($k+1, $h+1);
- $g->set($k, $h, $v+$l) if $l > $r;
- $g->set($k, $h, $v+$r) if $l <= $r;
- }
- }
- }
-
- while (@tri) {
- for $k (0..$count) {
- $holder = shift @tri;
- $g->set($k, $count, $holder);
- last if not @tri;
- }
- $count++;
- }
-
- solve_grid $g;
-
- print $g->get(0,0);