]> www.fi.muni.cz Git - aoc.git/blobdiff - 2022/25.pl
Day 13: polished solution
[aoc.git] / 2022 / 25.pl
index f68c61f76400f9af4d9ff5910762527fda2b542a..72b65536bcea77b2831aa4db6074de544050a5c4 100755 (executable)
@@ -2,7 +2,6 @@
 
 use v5.36;
 use strict;
-use experimental 'multidimensional';
 
 local $/ = "\n\n";
 
@@ -11,40 +10,33 @@ while (<>) {
        my ($l, $r) = map { eval $_ } split /\n/;
 
        $sum += $. if compare($l,$r) == 1;
-
 }
 say $sum;
 
 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 undef;
+                       $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;
 }
-                       
-
-