summary refs log tree commit diff homepage
path: root/2021
diff options
context:
space:
mode:
Diffstat (limited to '2021')
-rw-r--r--2021/day12.pl27
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";