]> www.fi.muni.cz Git - aoc2021.git/blob - 23.pl
Day 25: pretty straightforward
[aoc2021.git] / 23.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 = map { $_ => 1 } grep { /[a-z]/ } @path;
20
21         for my $node (keys %{ $g{$here} }) {
22                 next if $visited{$node};
23                 if ($node eq 'end') {
24                         push @paths, [ @path, $node ];
25                         say join('-', @{ $paths[-1] });
26                 } else {
27                         my $p = join('-', @path, $node);
28                         next if $subpaths{$p}++;
29                         walk(@path, $node);
30                 }
31         }
32 }
33
34 walk('start');
35
36 say scalar @paths;
37                 
38