From d404b132760c274818f3eef18b4e1afb0b0601df Mon Sep 17 00:00:00 2001 From: "Jan \"Yenya\" Kasprzak" Date: Tue, 10 Dec 2024 06:27:09 +0100 Subject: [PATCH] Day 10: graph walking. Nice. --- 2024/19.pl | 39 +++++++++++++++++++++++++++++++++++++++ 2024/20.pl | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100755 2024/19.pl create mode 100755 2024/20.pl diff --git a/2024/19.pl b/2024/19.pl new file mode 100755 index 0000000..5b9476b --- /dev/null +++ b/2024/19.pl @@ -0,0 +1,39 @@ +#!/usr/bin/perl -w + +use v5.38; +use experimental 'for_list'; + +my @map = map { chomp; [ split // ] } <>; +my $xmax = $#{ $map[0] }; +my $ymax = $#map; + +my $sum; +for my $y (0 .. $ymax) { + for my $x (0 .. $xmax) { + walk($x, $y, {}) if !$map[$y][$x]; + } +} +say $sum; + +sub walk { + my ($x, $y, $seen) = @_; + return if $seen->{"$x,$y"}++; + + my $now = $map[$y][$x]; + if ($now == 9) { + $sum++; + return; + } + + for my ($dx, $dy) ( + -1, 0, + 1, 0, + 0, -1, + 0, 1, + ) { + my ($nx, $ny) = ($x+$dx, $y+$dy); + next if $nx < 0 || $nx > $xmax || $ny < 0 || $ny > $ymax; + next if $map[$ny][$nx] != $now + 1; + walk($nx, $ny, $seen); + } +} diff --git a/2024/20.pl b/2024/20.pl new file mode 100755 index 0000000..a6ec2b1 --- /dev/null +++ b/2024/20.pl @@ -0,0 +1,38 @@ +#!/usr/bin/perl -w + +use v5.38; +use experimental 'for_list'; + +my @map = map { chomp; [ split // ] } <>; +my $xmax = $#{ $map[0] }; +my $ymax = $#map; + +my $sum; +for my $y (0 .. $ymax) { + for my $x (0 .. $xmax) { + walk($x, $y) if !$map[$y][$x]; + } +} +say $sum; + +sub walk { + my ($x, $y) = @_; + + my $now = $map[$y][$x]; + if ($now == 9) { + $sum++; + return; + } + + for my ($dx, $dy) ( + -1, 0, + 1, 0, + 0, -1, + 0, 1, + ) { + my ($nx, $ny) = ($x+$dx, $y+$dy); + next if $nx < 0 || $nx > $xmax || $ny < 0 || $ny > $ymax; + next if $map[$ny][$nx] != $now + 1; + walk($nx, $ny); + } +} -- 2.47.1