]> www.fi.muni.cz Git - aoc.git/blob - 2018/16.pl
Day 25: examining the input
[aoc.git] / 2018 / 16.pl
1 #!/usr/bin/perl -w
2
3 use v5.30;
4 use strict;
5
6 my @tree = split /\s+/, <>;
7
8 use List::Util qw(sum);
9
10 sub walk {
11         my $subnodes = shift @tree;
12         my $metadata = shift @tree;
13         my $sum = 0;
14         say "walk $subnodes $metadata";
15         my $sn1 = $subnodes;
16         my @subvals;
17         while ($sn1--) {
18                 push @subvals, walk();
19         }
20         if ($subnodes) {
21                 while ($metadata--) {
22                         my $id = shift @tree;
23                         $id--;
24                         $sum += $subvals[$id]
25                                 if $id < @subvals;
26                 }
27         } else {
28                 while ($metadata--) {
29                         $sum += shift @tree;
30                 }
31         }
32         say "returning $sum";
33         $sum;
34 }
35 say walk();