summary refs log tree commit diff homepage
diff options
context:
space:
mode:
authorJune McEnroe <june@causal.agency>2021-12-12 12:38:09 -0500
committerJune McEnroe <june@causal.agency>2021-12-12 12:38:09 -0500
commit184b238d85ab9906015803d4113c8605101e3731 (patch)
treee4b85b769cb05c9203ce7ecf385504951757951f
parentSolve day 11 part 2 (diff)
downloadaoc-184b238d85ab9906015803d4113c8605101e3731.tar.gz
aoc-184b238d85ab9906015803d4113c8605101e3731.zip
Solve day 12 part 1
-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";