aoc2021

Advent of Code 2021 solutions in Perl.
git clone git://git.samirparikh.com/aoc2021
Log | Files | Refs | README

commit c51f8db43b2c6899560cdebdce4707c8db4321cd
parent 8865166808130bb2724a653b3781c250f85ebe1a
Author: Samir Parikh <noreply@samirparikh.com>
Date:   Wed,  8 Dec 2021 01:42:27 +0000

add day05-2.pl

Diffstat:
Aday05-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);