]> www.fi.muni.cz Git - aoc2021.git/blob - 24.pl
Day 25: pretty straightforward
[aoc2021.git] / 24.pl
1 #!/usr/bin/perl -w
2
3 use v5.16;
4
5 my %g;
6 while (<>) {
7         chomp;
8         my ($n1, $n2) = split /-/;
9         $g{$n1}->{$n2} = 1;
10         $g{$n2}->{$n1} = 1;
11 }
12
13 my @paths;
14 my %subpaths;
15
16 sub walk {
17         my (@path) = @_;
18         my $here = $path[-1];
19         my %visited;
20         $visited{$_}++ for grep { /[a-z]/ } @path;
21         my $two = grep { $_ == 2 } values %visited;
22
23         for my $node (keys %{ $g{$here} }) {
24                 next if $visited{$node}
25                         && ($two || $node eq 'start' || $node eq 'end');
26                 my $p = join('-', @path, $node);
27                 next if $subpaths{$p}++;
28                 if ($node eq 'end') {
29                         push @paths, [ @path, $node ];
30                         say join('-', @path, $node);
31                 } else {
32                         walk(@path, $node);
33                 }
34         }
35 }
36
37 walk('start');
38
39 say scalar @paths;
40                 
41