diff options
| author | June McEnroe <june@causal.agency> | 2021-12-07 11:15:45 -0500 |
|---|---|---|
| committer | June McEnroe <june@causal.agency> | 2021-12-07 11:15:45 -0500 |
| commit | d893fd9c44fefaee274f1a1cd2e290411a648bf7 (patch) | |
| tree | 8801243bcfc2e2e2002199c8aeeba9e75077c991 | |
| parent | Solve day 7 part 1 (diff) | |
| download | aoc-d893fd9c44fefaee274f1a1cd2e290411a648bf7.tar.gz aoc-d893fd9c44fefaee274f1a1cd2e290411a648bf7.zip | |
Solve day 7 part 2
| -rw-r--r-- | 2021/day07.pl | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/2021/day07.pl b/2021/day07.pl index 209bcb2..a403125 100644 --- a/2021/day07.pl +++ b/2021/day07.pl @@ -1,7 +1,18 @@ use strict; use warnings; +use List::Util qw(min max sum); my @crabs = sort { $a <=> $b } split(/,/, <>); my $median = $crabs[@crabs / 2]; -my $cost = 0; -$cost += abs($_ - $median) for @crabs; +my $cost = sum(map { abs($_ - $median) } @crabs); print "$cost\n"; +sub cost { + my ($to, $from) = @_; + my $n = abs($from - $to); + $n * ($n + 1) / 2; +} +sub totalCost { + my $x = shift; + sum(map { cost($x, $_) } @_); +} +my $min = min(map { totalCost($_, @crabs) } min(@crabs)..max(@crabs)); +print "$min\n"; |