#!/usr/local/bin/perl # day 2015-14 use strict; use warnings; use v5.32; use lib '.'; use Day14; use List::Util qw( max ); @ARGV = "input" unless @ARGV; chomp( my $input = do { local $/; <> } ); my $TIME = 2503; my %reindeer = %{ init_reindeer( $input ) }; foreach my $time ( 1 .. $TIME ) { # after each second... # ...find position of each reindeer... $reindeer{ $_ }{ position } = get_position( $reindeer{ $_ }{ speed }, $reindeer{ $_ }{ fly_duration }, $reindeer{ $_ }{ rest_duration }, $time ) foreach ( keys %reindeer ); # ...and the furthest distance traveled after that second... my $furthest_position = max map { $reindeer{ $_ }{ position }} keys %reindeer; # ...by which reindeer(s)... my @furthest_reindeer = grep { $reindeer{ $_ }{ position } == $furthest_position } keys %reindeer; # ...and give them a point $reindeer{ $_ }{ points } += 1 foreach @furthest_reindeer; } say "part 1: ", max map { $reindeer{ $_ }{ position } } keys %reindeer; say "part 2: ", max map { $reindeer{ $_ }{ points } } keys %reindeer;