]> www.fi.muni.cz Git - aoc.git/blob - 2022/16.pl
Day 25: examining the input
[aoc.git] / 2022 / 16.pl
1 #!/usr/bin/perl -w
2
3 use v5.36;
4 use strict;
5 use experimental 'multidimensional';
6 use List::Util qw(none);
7
8 my @m = map { chomp; [ split // ] } <>;
9 my $xmax = @{ $m[0] };
10 my $ymax = @m;
11
12 my $max = 0;
13 for my $y (1 .. $ymax-2) {
14 for my $x (1 .. $xmax-2) {
15         my $count = sub {
16                 my $c = 0;
17                 for (@_) {
18                         $c++;
19                         last if $m[$_->[1]][$_->[0]] >= $m[$y][$x];
20                 }
21                 $c;
22         };
23         my $score = $count->( map { [ $_, $y ] } reverse 0 .. $x-1 )
24                   * $count->( map { [ $_, $y ] } $x+1 .. $xmax-1)
25                   * $count->( map { [ $x, $_ ] } reverse 0 .. $y-1)
26                   * $count->( map { [ $x, $_ ] } $y+1 .. $ymax-1)
27         ;
28         $max = $score if $max < $score;
29 } }
30
31 say $max;
32