commit c51f8db43b2c6899560cdebdce4707c8db4321cd
parent 8865166808130bb2724a653b3781c250f85ebe1a
Author: Samir Parikh <noreply@samirparikh.com>
Date: Wed, 8 Dec 2021 01:42:27 +0000
add day05-2.pl
Diffstat:
A | day05-2.pl | | | 70 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1 file changed, 70 insertions(+), 0 deletions(-)
diff --git a/day05-2.pl b/day05-2.pl
@@ -0,0 +1,70 @@
+#!/usr/bin/env perl
+
+use strict;
+use warnings;
+use v5.22;
+use List::Util qw( max );
+use diagnostics;
+
+sub draw_matrix {
+ my ($matrix, $rows, $columns) = @_;
+ my $answer;
+ foreach my $y (0 .. $rows) {
+ foreach my $x (0 .. $columns) {
+ if (defined( $matrix->[$y][$x] )) {
+ print $matrix->[$y][$x];
+ $answer++ if ($matrix->[$y][$x] > 1);
+ } else {
+ print ".";
+ }
+ }
+ print "\n";
+ }
+ return $answer;
+}
+
+if (@ARGV !=1) {
+ die "Usage: $0 [input-filename]";
+}
+
+my $input_filename = $ARGV[0];
+open my $filehandle, '<', $input_filename or
+ die "Could not open input file $input_filename: $!";
+
+chomp( my @input = ( <$filehandle> ) );
+my $wait;
+my @matrix = ();
+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]++;
+ #}
+ }
+ }
+ }
+ 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]++;
+ #}
+ }
+ }
+ }
+}
+
+say draw_matrix( \@matrix, $rows, $columns);