package Day14; use strict; use warnings; use v5.32; use Exporter qw( import ); our @EXPORT = qw( init_reindeer get_position ); sub init_reindeer { my $input = shift; my %reindeer; foreach ( split /\n/, $input ) { my ( $reindeer, $speed, $fly_duration, $rest_duration ) = m/(\w+) can fly (\d+) km\/s for (\d+) seconds, but then must rest for (\d+) seconds./; $reindeer{ $reindeer }{ speed } = $speed; $reindeer{ $reindeer }{ fly_duration } = $fly_duration; $reindeer{ $reindeer }{ rest_duration } = $rest_duration; $reindeer{ $reindeer }{ points } = 0; } return \%reindeer; } sub get_position { my ( $speed, $fly_duration, $rest_duration, $time ) = @_; my $duration = $fly_duration + $rest_duration; my $position; my ( $cycles, $remainder ) = ( int $time / $duration, $time % $duration ); if ( $remainder > $fly_duration ) { $cycles++; $position = $cycles * $fly_duration * $speed; } else { $position = $cycles * $fly_duration * $speed + $remainder * $speed; } return $position; } 1;