X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=2022%2F26.pl;h=17e84c1445db97603344b6761491b0fff2f40fec;hb=7bcb610dd31d98e807869d6202af407cfb3579c0;hp=acbc7f7123d45bdb839c5cc5b9003254052c3160;hpb=4524faa21cb3a4bb30ae8ebfd05248586b06d352;p=aoc.git diff --git a/2022/26.pl b/2022/26.pl index acbc7f7..17e84c1 100755 --- a/2022/26.pl +++ b/2022/26.pl @@ -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; } - - -