]> www.fi.muni.cz Git - aoc.git/blobdiff - 2022/26.pl
Day 13: polished solution
[aoc.git] / 2022 / 26.pl
index acbc7f7123d45bdb839c5cc5b9003254052c3160..17e84c1445db97603344b6761491b0fff2f40fec 100755 (executable)
@@ -2,49 +2,35 @@
 
 use v5.36;
 use strict;
-use experimental 'multidimensional';
 
-my @lists = map { bless $_, 'Sep' } [[2]], [[6]];
-push @lists, map { eval $_ } grep { length } <>;
-@lists = sort { compare($b, $a) } @lists;
-
-my $m = 1;
-for my $i (0 .. $#lists) {
-       $m *= $i+1 if ref $lists[$i] eq 'Sep';
-}
-
-say $m;
+my @lists = map { eval $_ } grep { length } <>;
+say((1 + grep { compare($_, [[2]]) == 1 } @lists)
+  * (2 + grep { compare($_, [[6]]) == 1 } @lists));
 
 sub compare($l, $r) {
        my $i = 0;
-       my $rv = 0;
-       while (1) {
+       my $res = 0;
+       while (!$res) {
                my $lv = $l->[$i];
                my $rv = $r->[$i];
 
-               my $comp;
                if (!defined $lv && defined $rv) {
-                       return 1;
+                       $res = 1;
                } elsif (defined $lv && !defined $rv) {
-                       return -1;
+                       $res = -1;
                } elsif (!defined $lv && !defined $rv) {
-                       return 0;
+                       $res = 0;
+                       last;
                } elsif (ref $lv && ref $rv) {
-                       $comp = compare($lv, $rv);
+                       $res = compare($lv, $rv);
                } elsif (ref $lv && !ref $rv) {
-                       $comp = compare($lv, [$rv]);
+                       $res = compare($lv, [$rv]);
                } elsif (!ref $lv && ref $rv) {
-                       $comp = compare([$lv], $rv);
-               } elsif (!ref $lv && !ref $rv) {
-                       $comp = $rv <=> $lv if $lv != $rv;
+                       $res = compare([$lv], $rv);
                } else {
-                       die "$lv $rv";
+                       $res = $rv <=> $lv;
                }
-                       
-               return $comp if defined $comp;
                $i++;
        }
+       return $res;
 }
-                       
-
-