commit e87a5bf731234a77f15b6b0817e03df783487764
parent c51f8db43b2c6899560cdebdce4707c8db4321cd
Author: Samir Parikh <noreply@samirparikh.com>
Date: Thu, 9 Dec 2021 00:15:11 +0000
update day05-1.pl to provide a much better solution
Diffstat:
M | day05-1.pl | | | 56 | +++++++++++++++++++++----------------------------------- |
1 file changed, 21 insertions(+), 35 deletions(-)
diff --git a/day05-1.pl b/day05-1.pl
@@ -6,6 +6,17 @@ use v5.22;
use List::Util qw( max );
use diagnostics;
+sub draw_matrix {
+ my ($matrix) = shift;
+ my $answer;
+ foreach my $y (@$matrix) {
+ foreach my $x (@$y) {
+ $answer++ if (defined( $x ) && ($x > 1));
+ }
+ }
+ return $answer;
+}
+
if (@ARGV !=1) {
die "Usage: $0 [input-filename]";
}
@@ -17,46 +28,21 @@ open my $filehandle, '<', $input_filename or
chomp( my @input = ( <$filehandle> ) );
my $wait;
my @matrix = ();
-my $rows = 0;
-my $columns = 0;
+my ($rows, $columns) = (0, 0);
foreach (@input) {
my ($x1, $y1, $x2, $y2) = ( /(\d+),(\d+) -> (\d+),(\d+)/ );
- if (($x2 <= $x1) && ($y2 <= $y1)) {
- ($x2, $x1) = ($x1, $x2);
- ($y2, $y1) = ($y1, $y2);
- }
- if (($x2 <= $x1) && ($y2 >= $y1)) {
- ($x2, $x1) = ($x1, $x2);
- ($y2, $y1) = ($y1, $y2);
- }
- $columns = max( $columns, $x1, $x2);
- $rows = max( $rows, $y1, $y2);
- if (($x2 >= $x1) && ($y2 >= $y1)) {
- for (my $x = $x1; $x < $x2 + 1; $x++) {
- for (my $y = $y1; $y < $y2 + 1; $y++) {
- if (($x1 == $x2) || ($y1 == $y2)) {
- $matrix[$y][$x]++;
- }
- }
+ if ($x1 == $x2) { # line is vertical
+ ($y1, $y2) = ($y2, $y1) if ($y1 > $y2); # swap so that $y1 < $y2
+ for (my $y = $y1; $y <= $y2; $y++) {
+ $matrix[$y][$x1]++;
}
}
- elsif (($x2 >= $x1) && ($y2 <= $y1)) {
- for (my $x = $x1; $x < $x2 + 1; $x++) {
- for (my $y = $y2; $y < $y1 + 1; $y++) {
- if (($x1 == $x2) || ($y1 == $y2)) {
- $matrix[$y][$x]++;
- }
- }
+ elsif ($y1 == $y2) { # line is horizontal
+ ($x1, $x2) = ($x2, $x1) if ($x1 > $x2); # swap so that $x1 < $x2
+ for (my $x = $x1; $x <= $x2; $x++) {
+ $matrix[$y1][$x]++;
}
}
}
-my $answer;
-foreach my $y (0 .. $rows) {
- foreach my $x (0 .. $columns) {
- if (defined( $matrix[$y][$x] )) {
- $answer++ if ($matrix[$y][$x] > 1);
- }
- }
-}
-say "answer is $answer";
+say draw_matrix( \@matrix );