Add day 7.

This commit is contained in:
Sebastian Bugge 2024-12-07 06:26:58 +01:00
parent 0162804c51
commit c97f1fb794
Signed by: kaholaz
GPG key ID: 2EFFEDEE03519691

60
day07.pl Normal file
View file

@ -0,0 +1,60 @@
#!/usr/bin/env perl
use strict;
use warnings;
my @results = ();
my @expressions = ();
while (<>) {
next if !/(\d+): ((?:\d+ ?)+)/;
push @results, $1;
my @numbers = split ' ', $2;
push @expressions, \@numbers;
}
my $answer = 0;
for my $i (0 .. $#results) {
print "$i/$#results\n";
my $result = $results[$i];
my $expression = $expressions[$i];
my @operators = map { 0 } 0..($#$expression - 1);
while (1) {
my $total = $expression->[0];
for my $i (0 .. $#operators) {
my $operator = $operators[$i];
my $number = $expression->[$i + 1];
if ($operator == 0) {
$total += $number;
} elsif ($operator == 1) {
$total *= $number;
} elsif ($operator == 2) {
$total .= $number;
}
}
if ($total == $result) {
$answer += $result;
last;
}
my $done = 0;
$operators[0]++;
for $i (0 .. $#operators) {
my $operator = $operators[$i];
if ($operator == 3) {
if (!defined($operators[$i + 1])) {
$done = 1;
last;
}
$operators[$i] = 0;
$operators[$i + 1]++;
}
}
last if $done;
}
}
print "$answer\n";