]> www.fi.muni.cz Git - aoc.git/blob - 2022/26.pl
Day 13: polished solution
[aoc.git] / 2022 / 26.pl
1 #!/usr/bin/perl -w
2
3 use v5.36;
4 use strict;
5
6 my @lists = map { eval $_ } grep { length } <>;
7 say((1 + grep { compare($_, [[2]]) == 1 } @lists)
8   * (2 + grep { compare($_, [[6]]) == 1 } @lists));
9
10 sub compare($l, $r) {
11         my $i = 0;
12         my $res = 0;
13         while (!$res) {
14                 my $lv = $l->[$i];
15                 my $rv = $r->[$i];
16
17                 if (!defined $lv && defined $rv) {
18                         $res = 1;
19                 } elsif (defined $lv && !defined $rv) {
20                         $res = -1;
21                 } elsif (!defined $lv && !defined $rv) {
22                         $res = 0;
23                         last;
24                 } elsif (ref $lv && ref $rv) {
25                         $res = compare($lv, $rv);
26                 } elsif (ref $lv && !ref $rv) {
27                         $res = compare($lv, [$rv]);
28                 } elsif (!ref $lv && ref $rv) {
29                         $res = compare([$lv], $rv);
30                 } else {
31                         $res = $rv <=> $lv;
32                 }
33                 $i++;
34         }
35         return $res;
36 }