]> www.fi.muni.cz Git - aoc.git/commitdiff
Day 13: polished solution
authorJan "Yenya" Kasprzak <kas@fi.muni.cz>
Tue, 13 Dec 2022 07:16:57 +0000 (08:16 +0100)
committerJan "Yenya" Kasprzak <kas@fi.muni.cz>
Tue, 13 Dec 2022 07:17:36 +0000 (08:17 +0100)
2022/25.pl
2022/26.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;
 }
-                       
-
-       
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;
 }
-                       
-
-