#!/usr/local/bin/perl # day 2015-17 use strict; use warnings; use v5.32; use List::Util qw ( min ); use Algorithm::Knapsack; # I know, this is cheating @ARGV = "input" unless @ARGV; chomp( my $input = do { local $/; <> } ); my @containers = split /\n/, $input; my $LITERS = 150; my @num_containers; my $knapsack = Algorithm::Knapsack->new( capacity => $LITERS, weights => \@containers, ); $knapsack->compute(); foreach my $solution ($knapsack->solutions()) { push @num_containers => scalar ( map { $containers[$_] } @{$solution} ); } say "part 1: ", scalar $knapsack->solutions(); say "part 2: ", scalar grep { $_ == min @num_containers } @num_containers;