version 2
This commit is contained in:
parent
57b7b318b4
commit
4c98ac6a61
@ -6,31 +6,18 @@ use List::AllUtils qw/ max sum /;
|
|||||||
|
|
||||||
sub parse_line($line) {
|
sub parse_line($line) {
|
||||||
my %data;
|
my %data;
|
||||||
$line =~ s/Game (\d+)://;
|
$line =~ /Game (\d+):/;
|
||||||
$data{game} = $1;
|
$data{game} = $1;
|
||||||
|
|
||||||
my @entries = split ';', $line;
|
$data{$_} = max $line =~ /(\d+) $_/g for qw/ red green blue /;
|
||||||
|
|
||||||
$data{entries} = [
|
|
||||||
map { +{ map { /(\d+) (\w+)/; $2 => $1 } split ",", $_ } } @entries
|
|
||||||
];
|
|
||||||
|
|
||||||
return \%data;
|
return \%data;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub aggregate_entries($game) {
|
|
||||||
my %agg = map {
|
|
||||||
my $color = $_;
|
|
||||||
$color => max map { $_->{$color} // 0 } $game->{entries}->@*
|
|
||||||
} qw/ red green blue /;
|
|
||||||
+{ %$game, %agg};
|
|
||||||
}
|
|
||||||
|
|
||||||
sub solution_1 ($input) {
|
sub solution_1 ($input) {
|
||||||
sum
|
sum
|
||||||
map { $_->{game} }
|
map { $_->{game} }
|
||||||
grep { $_->{red} <= 12 and $_->{blue} <= 14 and $_->{green} <= 13 }
|
grep { $_->{red} <= 12 and $_->{blue} <= 14 and $_->{green} <= 13 }
|
||||||
map { aggregate_entries($_) }
|
|
||||||
map { parse_line($_)}
|
map { parse_line($_)}
|
||||||
split "\n", $input;
|
split "\n", $input;
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,6 @@ use List::AllUtils qw/ min product sum /;
|
|||||||
sub solution_2 ($input) {
|
sub solution_2 ($input) {
|
||||||
sum
|
sum
|
||||||
map { product $_->@{qw/ red blue green /}}
|
map { product $_->@{qw/ red blue green /}}
|
||||||
map { Part1::aggregate_entries($_) }
|
|
||||||
map { Part1::parse_line($_)}
|
map { Part1::parse_line($_)}
|
||||||
split "\n", $input;
|
split "\n", $input;
|
||||||
}
|
}
|
||||||
|
@ -33,7 +33,7 @@ for my $part (@parts) {
|
|||||||
day => $day,
|
day => $day,
|
||||||
year => $year,
|
year => $year,
|
||||||
|
|
||||||
#variant => '',
|
variant => 'v2',
|
||||||
language => 'perl',
|
language => 'perl',
|
||||||
part => $part->{part},
|
part => $part->{part},
|
||||||
time => $res->cpu_a / $res->iters,
|
time => $res->cpu_a / $res->iters,
|
||||||
|
@ -7,10 +7,9 @@ use Path::Tiny;
|
|||||||
use Part1;
|
use Part1;
|
||||||
|
|
||||||
|
|
||||||
is Part1::parse_line("Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green") => +{ game => 1, entries => [
|
is Part1::parse_line("Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green") => +{ game => 1,
|
||||||
{ blue => 3, red => 4 }, { red => 1, green => 2, blue => 6},
|
blue => 6, red => 4, green => 2
|
||||||
{ green => 2 },
|
};
|
||||||
]};
|
|
||||||
|
|
||||||
is Part1::solution_1( <<'END' ) => 8;
|
is Part1::solution_1( <<'END' ) => 8;
|
||||||
Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green
|
Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green
|
||||||
|
@ -17,4 +17,4 @@ END
|
|||||||
my $input = path('input')->slurp;
|
my $input = path('input')->slurp;
|
||||||
|
|
||||||
cmp_ok Part2::solution_2($input), ">", 1720;
|
cmp_ok Part2::solution_2($input), ">", 1720;
|
||||||
is Part2::solution_2($input) => 'TODO';
|
is Part2::solution_2($input) => 72706;
|
||||||
|
@ -4,3 +4,5 @@
|
|||||||
{"day":1,"year":2023,"language":"javascript","part":"2","timestamp":"2023-12-01T20:55:40.989Z","time":0.004363576172638605,"persec":229.1698277826353}
|
{"day":1,"year":2023,"language":"javascript","part":"2","timestamp":"2023-12-01T20:55:40.989Z","time":0.004363576172638605,"persec":229.1698277826353}
|
||||||
{"language":"perl","timestamp":"2023-12-02T16:40:42","part":1,"day":"2","persec":297.067171239357,"year":"2023","time":0.00336624203821656}
|
{"language":"perl","timestamp":"2023-12-02T16:40:42","part":1,"day":"2","persec":297.067171239357,"year":"2023","time":0.00336624203821656}
|
||||||
{"language":"perl","timestamp":"2023-12-02T16:40:55","part":2,"day":"2","time":0.00338658146964856,"year":"2023","persec":295.283018867925}
|
{"language":"perl","timestamp":"2023-12-02T16:40:55","part":2,"day":"2","time":0.00338658146964856,"year":"2023","persec":295.283018867925}
|
||||||
|
{"timestamp":"2023-12-02T18:29:20","day":"2","part":1,"variant":"v2","year":"2023","time":0.00388473053892216,"language":"perl","parsec":257.418111753372}
|
||||||
|
{"day":"2","timestamp":"2023-12-02T18:29:32","part":2,"year":"2023","variant":"v2","parsec":258.117195004803,"language":"perl","time":0.00387420915519166}
|
||||||
|
Loading…
Reference in New Issue
Block a user