day06.pl (1068B) - raw
1 #!/usr/bin/env perl 2 3 use strict; 4 use warnings; 5 use v5.22; 6 use List::Util qw(sum); 7 8 sub get_filehandle { 9 if (@ARGV !=1) { 10 die "Usage: $0 [input-filename]"; 11 } 12 my $input_filename = $ARGV[0]; 13 open my $filehandle, '<', $input_filename or 14 die "Could not open input file $input_filename: $!"; 15 return $filehandle; 16 } 17 18 sub get_numbers { 19 my $fh = shift; 20 chomp( my $numbers = ( <$fh> ) ); 21 return (split( ",", $numbers)); 22 } 23 24 # Advent of Code 2021 Day 06 25 my $filehandle = get_filehandle(); 26 my @numbers = get_numbers($filehandle); 27 my $days = 256; # update this for Parts 1 and 2 28 my %fish_timer = map { $_, 0 } (0 .. 8); 29 $fish_timer{$_}++ foreach (@numbers); 30 for (my $i = 0; $i < $days; $i++) { # loop for number of days 31 my %tmp_timer = (); 32 foreach my $age (reverse 1 .. 8) { # loop for each age 33 $tmp_timer{$age - 1} = $fish_timer{$age}; 34 } 35 # process fish with timer of 0 36 $tmp_timer{6} += $fish_timer{0}; 37 $tmp_timer{8} += $fish_timer{0}; 38 %fish_timer = %tmp_timer; 39 } 40 41 say sum values %fish_timer;