#!/usr/local/bin/perl # day 2015-02 use strict; use warnings; use v5.32; @ARGV = "input" unless @ARGV; chomp( my $input = do { local $/; <> } ); use List::Util qw( min sum product ); my @presents = split /\n/, $input; my ($total_wrapping_paper, $total_ribbon_length); foreach (@presents) { my @dimensions = split /x/, $_; my (@faces, @perimeters); $faces[0] = $dimensions[0] * $dimensions[1]; $faces[1] = $dimensions[1] * $dimensions[2]; $faces[2] = $dimensions[0] * $dimensions[2]; $perimeters[0] = 2 * ($dimensions[0] + $dimensions[1]); $perimeters[1] = 2 * ($dimensions[1] + $dimensions[2]); $perimeters[2] = 2 * ($dimensions[0] + $dimensions[2]); $total_wrapping_paper += 2 * (sum @faces) + (min @faces); $total_ribbon_length += (min @perimeters) + (product @dimensions); } say "part 1: ", $total_wrapping_paper; say "part 2: ", $total_ribbon_length;