aoc2015

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

commit 6349ed633f914168d8e0707f03320dc95cb5363b
parent f7c31c6833f5860ba7cb74b1fa8dc7253182cfa0
Author: Samir Parikh <noreply@samirparikh.com>
Date:   Tue,  8 Nov 2022 01:26:35 +0000

refactor code using map and grep to make it more perlish

Diffstat:
Mday14/day14.pl | 23+++++++++--------------
1 file changed, 9 insertions(+), 14 deletions(-)

diff --git a/day14/day14.pl b/day14/day14.pl @@ -16,7 +16,8 @@ my $TIME = 2503; my %reindeer = %{ init_reindeer( $input ) }; foreach my $time ( 1 .. $TIME ) { - # find position of each reindeer after each second + # after each second... + # ...find position of each reindeer... foreach my $reindeer ( sort keys %reindeer ) { $reindeer{ $reindeer }{ position } = get_position( $reindeer{ $reindeer }{ speed }, @@ -24,19 +25,13 @@ foreach my $time ( 1 .. $TIME ) { $reindeer{ $reindeer }{ rest_duration }, $time ); } - # find the furthest position - my $furthest_position = 0; - foreach my $reindeer ( sort keys %reindeer ) { - if ( $reindeer{ $reindeer }{ position } > $furthest_position ) { - $furthest_position = $reindeer{ $reindeer }{ position }; - } - } - # give those reindeer(s) a point - foreach my $reindeer ( sort keys %reindeer ) { - if ( $reindeer{ $reindeer }{ position } == $furthest_position ) { - $reindeer{ $reindeer }{ points } += 1; - } - } + # ...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; } # find distance furthest traveled and most points