]> www.fi.muni.cz Git - aoc.git/blob - 2019/12.pl
First half of Year 2019
[aoc.git] / 2019 / 12.pl
1 #!/usr/bin/perl -w
2
3 use v5.16;
4 use List::Util qw(sum);
5
6 my %orb;
7 while (<>) {
8         chomp;
9         my @b = split /\)/;
10         $orb{$b[0]}{$b[1]} = 1;
11 }
12
13 sub walk {
14         my ($b, $depth) = @_;
15         my @rv;
16         $rv[0] = 0 if $b eq 'YOU';
17         $rv[1] = 0 if $b eq 'SAN';
18         say "walking $b at $depth, rv=", ($rv[0] // '_'), ',', ($rv[1] // '_');
19         for my $x (keys %{ $orb{$b} }) {
20                 say "$b->$x";
21                 my ($v1, $v2) = walk($x, $depth+1);     
22                 say "$b<-$x, rv=", ($rv[0] // '_'), ',', ($rv[1] // '_');
23                 $rv[0] //= $v1;
24                 $rv[1] //= $v2;
25                 if (defined $rv[0] && defined $rv[1]) {
26                         say "Back at $b: $rv[0],$rv[1]";
27                         say $rv[0]+$rv[1] - 2;
28                         exit 0;
29                 }
30         }
31         $rv[0]++ if defined $rv[0];
32         $rv[1]++ if defined $rv[1];
33         say "returning from $b at $depth, rv=", ($rv[0] // '_'), ',', ($rv[1] // '_');
34         return @rv;
35 }
36
37 walk('COM', 0);
38
39                 
40                 
41                 
42