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