summary refs log tree commit diff homepage
diff options
context:
space:
mode:
-rw-r--r--2023/day11.pl44
1 files changed, 44 insertions, 0 deletions
diff --git a/2023/day11.pl b/2023/day11.pl
new file mode 100644
index 0000000..b9996b7
--- /dev/null
+++ b/2023/day11.pl
@@ -0,0 +1,44 @@
+use strict;
+use warnings;
+my (@gs, @xp, @yp);
+my ($x, $y) = (0, 0);
+while (<>) {
+	chomp;
+	$x = 0;
+	for (split //) {
+		if ($_ eq "#") {
+			push @gs, [ $x, $y ];
+			$xp[$x] = 1;
+			$yp[$y] = 1;
+		}
+		$x++;
+	}
+	$y++;
+}
+my ($w, $h) = ($x, $y);
+for ($x = 0; $x < $w; ++$x) {
+	next if defined $xp[$x];
+	splice @xp, $x, 0, undef;
+	for (@gs) {
+		$_->[0]++ if $_->[0] > $x;
+	}
+	$x++;
+	$w++;
+}
+for ($y = 0; $y < $h; ++$y) {
+	next if defined $yp[$y];
+	splice @yp, $y, 0, undef;
+	for (@gs) {
+		$_->[1]++ if $_->[1] > $y;
+	}
+	$y++;
+	$h++;
+}
+my $sum = 0;
+while (@gs) {
+	my $a = shift @gs;
+	for my $b (@gs) {
+		$sum += abs($a->[0] - $b->[0]) + abs($a->[1] - $b->[1]);
+	}
+}
+print $sum, "\n";