use v5.36;
use strict;
-use experimental 'multidimensional';
local $/ = "\n\n";
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;
}
-
-
-
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;
}
-
-
-