From 6d334c31b14bef1a0d3ea77556e9766a583eddde Mon Sep 17 00:00:00 2001 From: "Jan \"Yenya\" Kasprzak" Date: Thu, 9 Dec 2021 08:21:48 +0100 Subject: [PATCH] Day 9: special cases. not pretty. --- 17.pl | 24 ++++++++++++++++++++++++ 18.pl | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100755 17.pl create mode 100755 18.pl diff --git a/17.pl b/17.pl new file mode 100755 index 0000000..e4d2707 --- /dev/null +++ b/17.pl @@ -0,0 +1,24 @@ +#!/usr/bin/perl -w + +use v5.16; + +my @m = map { chomp; [ split // ]; } <>; +my $maxy = $#m; +my $maxx = $#{$m[0]}; +say "$maxx x $maxy"; + +my $sum; +for my $y (0 .. $maxy) { + for my $x (0 .. $maxx) { + my $val = $m[$y][$x]; + next if $y > 0 && $m[$y-1][$x] <= $val; + next if $y < $maxy && $m[$y+1][$x] <= $val; + next if $x > 0 && $m[$y][$x-1] <= $val; + next if $x < $maxx && $m[$y][$x+1] <= $val; + say "found at $x $y"; + $sum += $val + 1; + } +} + +say $sum; + diff --git a/18.pl b/18.pl new file mode 100755 index 0000000..c4223b4 --- /dev/null +++ b/18.pl @@ -0,0 +1,56 @@ +#!/usr/bin/perl -w + +use v5.16; + +my @m = map { chomp; [ split // ]; } <>; +my $maxy = $#m; +my $maxx = $#{$m[0]}; +say "$maxx x $maxy"; + +my @low; +for my $y (0 .. $maxy) { + for my $x (0 .. $maxx) { + my $val = $m[$y][$x]; + next if $y > 0 && $m[$y-1][$x] <= $val; + next if $y < $maxy && $m[$y+1][$x] <= $val; + next if $x > 0 && $m[$y][$x-1] <= $val; + next if $x < $maxx && $m[$y][$x+1] <= $val; + push @low, [$x, $y]; + } +} + +my @sizes; + +for my $start (@low) { + my $added = 0; + my $size =1; + my @points = ($start); + my %pts = (join(',', @$start) => 1); + do { + $added = 0; + for my $p (@points) { + for my $add (([0, 1], [1, 0], [-1, 0], [0, -1])) { + my ($x, $y) = ($p->[0]+$add->[0], $p->[1]+$add->[1]); + # say "trying $x, $y"; + next if $pts{join(',',$x,$y)}; + next if $x < 0 || $x > $maxx; + next if $y < 0 || $y > $maxy; + next if $m[$y][$x] == 9; + $added = 1; + $pts{join(',',$x,$y)} = 1; + push @points, [$x, $y]; + # say "adding $x, $y = $m[$y][$x]"; + $size++; + } + } + } while ($added); + # say "$start->[0], $start->[1] : $size"; + push @sizes, $size; +} + +@sizes = sort { $b <=> $a } @sizes; + +say $sizes[0]*$sizes[1]*$sizes[2]; + + + -- 2.43.0