diff options
-rw-r--r-- | 2021/day12.pl | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/2021/day12.pl b/2021/day12.pl new file mode 100644 index 0000000..ceef3e0 --- /dev/null +++ b/2021/day12.pl @@ -0,0 +1,27 @@ +use strict; +use warnings; +my %edges; +while (<>) { + /(\w+)-(\w+)/; + $edges{$1} //= []; + $edges{$2} //= []; + push @{$edges{$1}}, $2; + push @{$edges{$2}}, $1; +} +my $paths = 0; +my @queue = (['start']); +while (@queue) { + my @path = @{shift @queue}; + my %visited = map { $_ => 1 } @path; + for (@{$edges{$path[0]}}) { + if ($_ eq 'end') { + $paths++; + } elsif (/[a-z]/ && $visited{$_}) { + next; + } else { + my @next = ($_, @path); + push @queue, \@next; + } + } +} +print "$paths\n"; |