From 7bcb610dd31d98e807869d6202af407cfb3579c0 Mon Sep 17 00:00:00 2001 From: "Jan \"Yenya\" Kasprzak" Date: Tue, 13 Dec 2022 08:16:57 +0100 Subject: [PATCH] Day 13: polished solution --- 2022/25.pl | 30 +++++++++++------------------- 2022/26.pl | 42 ++++++++++++++---------------------------- 2 files changed, 25 insertions(+), 47 deletions(-) diff --git a/2022/25.pl b/2022/25.pl index f68c61f..72b6553 100755 --- a/2022/25.pl +++ b/2022/25.pl @@ -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; } - - - 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; } - - - -- 2.43.0