aoc2021

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

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;