#!/usr/bin/env perl use strict; use warnings; use v5.22; use List::Util qw( max ); 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]"; } 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 ($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 ($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]++; } } else { # line is diagonal my $dx = ($x2 > $x1) ? 1 : -1; my $dy = ($y2 > $y1) ? 1 : -1; for (my $x = $x1, my $y = $y1; $x!=$x2 && $y!=$y2; $x+=$dx, $y+=$dy) { $matrix[$y][$x]++; } $matrix[$y2][$x2]++; # for loop above stops just before reaching 2nd point } } say draw_matrix( \@matrix );