]> www.fi.muni.cz Git - aoc2021.git/blob - 29.pl
Day 25: pretty straightforward
[aoc2021.git] / 29.pl
1 #!/usr/bin/perl -w
2
3 use v5.16;
4 use Data::Dumper;
5
6 $; = ',';
7 my @m;
8 my ($maxx, $maxy) = (0, 0);
9 while (<>) {
10         chomp;
11         push @m, [ split // ];
12         $maxx = length;
13         $maxy++;
14 }
15
16 my %cost = ("0,0" => 0);
17 my @todo = ([0, 0]);
18
19 while (my $p = shift @todo) {
20         my ($sx, $sy) = @$p;
21         for my $d ([ 0, 1], [0, -1], [1, 0], [-1, 0]) {
22                 my $dx = $sx + $d->[0];
23                 my $dy = $sy + $d->[1];
24                 next if $dx < 0 || $dx >= $maxx || $dy < 0 || $dy >= $maxy;
25                 if (!defined $cost{$dx,$dy}
26                         || $cost{$dx,$dy} > $cost{$sx,$sy} + $m[$dy][$dx]) {
27                         $cost{$dx,$dy} = $cost{$sx,$sy} + $m[$dy][$dx];
28                         push @todo, [$dx,$dy];
29                 }
30         }
31 }
32
33 say $cost{$maxx-1,$maxy-1};
34