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