diff --git a/2023/07/Part1.pm b/2023/07/Part1.pm new file mode 100644 index 0000000..c9b4e65 --- /dev/null +++ b/2023/07/Part1.pm @@ -0,0 +1,11 @@ +use 5.38.0; + +package Part1; + +use List::AllUtils qw/ /; + +sub solution_1 ($input) { + ...; +} + +1; diff --git a/2023/07/Part2.pm b/2023/07/Part2.pm new file mode 100644 index 0000000..c907947 --- /dev/null +++ b/2023/07/Part2.pm @@ -0,0 +1,14 @@ +use 5.38.0; + +package Part2; + +use Part1; + +use List::AllUtils qw/ /; + + +sub solution_2 ($input) { + ...; +} + +1; diff --git a/2023/07/benchmark.pl b/2023/07/benchmark.pl new file mode 100644 index 0000000..36ab17c --- /dev/null +++ b/2023/07/benchmark.pl @@ -0,0 +1,43 @@ +use 5.38.0; + +use Benchmark ':hireswallclock'; +use Path::Tiny; +use JSON qw/ to_json /; +use DateTime; +use File::Serialize; + +use Part1; +use Part2; + +my $day = path('.')->absolute->basename =~ s/^0//r; +my $year = path('.')->absolute->parent->basename; +my $solutions = deserialize_file('solutions.yml'); + +my @parts = ( + { part => 1, sub => \&Part1::solution_1, expected => $solutions->{1} }, + { part => 2, sub => \&Part2::solution_2, expected => $solutions->{2} }, +); + +my $input = path('./input')->slurp; + +for my $part (@parts) { + my $res = Benchmark::countit( + 10, + sub { + $part->{sub}->($input) == $part->{expected} or die; + } + ); + + my $result = { + day => $day, + year => $year, + + #variant => '', + language => 'perl', + part => $part->{part}, + time => $res->cpu_a / $res->iters, + timestamp => DateTime->now->iso8601, + }; + say to_json $result; +} + diff --git a/2023/07/part1.t b/2023/07/part1.t new file mode 100644 index 0000000..ae7365e --- /dev/null +++ b/2023/07/part1.t @@ -0,0 +1,13 @@ +use 5.38.0; + +use Test2::V0; + +use Path::Tiny; + +use Part1; + +my $input = path('input')->slurp; + +is Part1::solution_1($input) => 'TODO'; + +done_testing; diff --git a/2023/07/part2.t b/2023/07/part2.t new file mode 100644 index 0000000..0401ccc --- /dev/null +++ b/2023/07/part2.t @@ -0,0 +1,13 @@ +use 5.38.0; + +use Test2::V0; + +use Path::Tiny; + +use Part2; + +my $input = path('input')->slurp; + +is Part2::solution_2($input) => 'TODO'; + +done_testing; diff --git a/2023/07/solutions.yml b/2023/07/solutions.yml new file mode 100644 index 0000000..67055f3 --- /dev/null +++ b/2023/07/solutions.yml @@ -0,0 +1,2 @@ +1: TODO +2: TODO diff --git a/2023/preset/day/templates/perl/benchmark.pl b/2023/preset/day/templates/perl/benchmark.pl index fcf3e70..36ab17c 100644 --- a/2023/preset/day/templates/perl/benchmark.pl +++ b/2023/preset/day/templates/perl/benchmark.pl @@ -4,16 +4,18 @@ use Benchmark ':hireswallclock'; use Path::Tiny; use JSON qw/ to_json /; use DateTime; +use File::Serialize; use Part1; use Part2; my $day = path('.')->absolute->basename =~ s/^0//r; my $year = path('.')->absolute->parent->basename; +my $solutions = deserialize_file('solutions.yml'); my @parts = ( - { part => 1, sub => \&Part1::solution_1, expected => 'TODO' }, - { part => 2, sub => \&Part2::solution_2, expected => 'TODO' }, + { part => 1, sub => \&Part1::solution_1, expected => $solutions->{1} }, + { part => 2, sub => \&Part2::solution_2, expected => $solutions->{2} }, ); my $input = path('./input')->slurp;