day02.pl (966B) - raw
1 #!/usr/local/bin/perl 2 # day 2015-02 3 4 use strict; 5 use warnings; 6 use v5.32; 7 8 @ARGV = "input" unless @ARGV; 9 10 chomp( my $input = do { local $/; <> } ); 11 12 use List::Util qw( min sum product ); 13 14 my @presents = split /\n/, $input; 15 my ($total_wrapping_paper, $total_ribbon_length); 16 17 foreach (@presents) { 18 my @dimensions = split /x/, $_; 19 my (@faces, @perimeters); 20 $faces[0] = $dimensions[0] * $dimensions[1]; 21 $faces[1] = $dimensions[1] * $dimensions[2]; 22 $faces[2] = $dimensions[0] * $dimensions[2]; 23 $perimeters[0] = 2 * ($dimensions[0] + $dimensions[1]); 24 $perimeters[1] = 2 * ($dimensions[1] + $dimensions[2]); 25 $perimeters[2] = 2 * ($dimensions[0] + $dimensions[2]); 26 $total_wrapping_paper += 2 * (sum @faces) + (min @faces); 27 $total_ribbon_length += (min @perimeters) + (product @dimensions); 28 } 29 30 say "part 1: ", $total_wrapping_paper; 31 say "part 2: ", $total_ribbon_length;