From 679dbbe180c10762fddc80db254555d697d7717b Mon Sep 17 00:00:00 2001 From: Yanick Champoux Date: Fri, 1 Dec 2023 13:03:18 -0500 Subject: [PATCH 1/8] preps for day 2 --- 2023/02/Part1.pm | 11 +++++++++++ 2023/02/Part2.pm | 14 ++++++++++++++ 2023/02/benchmark.pl | 41 +++++++++++++++++++++++++++++++++++++++++ 2023/02/part1.t | 11 +++++++++++ 2023/02/part2.t | 11 +++++++++++ 5 files changed, 88 insertions(+) create mode 100644 2023/02/Part1.pm create mode 100644 2023/02/Part2.pm create mode 100644 2023/02/benchmark.pl create mode 100644 2023/02/part1.t create mode 100644 2023/02/part2.t diff --git a/2023/02/Part1.pm b/2023/02/Part1.pm new file mode 100644 index 0000000..c9b4e65 --- /dev/null +++ b/2023/02/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/02/Part2.pm b/2023/02/Part2.pm new file mode 100644 index 0000000..c907947 --- /dev/null +++ b/2023/02/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/02/benchmark.pl b/2023/02/benchmark.pl new file mode 100644 index 0000000..a01b63b --- /dev/null +++ b/2023/02/benchmark.pl @@ -0,0 +1,41 @@ +use 5.38.0; + +use Benchmark ':hireswallclock'; +use Path::Tiny; +use JSON qw/ to_json /; +use DateTime; + +use Part1; +use Part2; + +my $day = path('.')->absolute->basename =~ s/^0//r; +my $year = path('.')->absolute->dir->basename; + +my @parts = ( + { part => 1, sub => \&Part1::solution_1, expected => 'TODO' }, + { part => 2, sub => \&Part2::solution_2, expected => 'TODO' }, +); + +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/02/part1.t b/2023/02/part1.t new file mode 100644 index 0000000..d09f96c --- /dev/null +++ b/2023/02/part1.t @@ -0,0 +1,11 @@ +use 5.38.0; + +use Test2::V0; + +use Path::Tiny; + +use Part1; + +my $input = path('input')->slurp; + +is Part1::solution_1($input) => 'TODO'; diff --git a/2023/02/part2.t b/2023/02/part2.t new file mode 100644 index 0000000..41be8ed --- /dev/null +++ b/2023/02/part2.t @@ -0,0 +1,11 @@ +use 5.38.0; + +use Test2::V0; + +use Path::Tiny; + +use Part2; + +my $input = path('input')->slurp; + +is Part2::solution_2($input) => 'TODO'; From a163421f2cc1c6d799f4df3e490372ee15ea6b19 Mon Sep 17 00:00:00 2001 From: Yanick Champoux Date: Fri, 1 Dec 2023 13:38:44 -0500 Subject: [PATCH 2/8] add preset for a perl day --- 2023/preset/day/.gitignore | 1 + 2023/preset/day/README.md | 19 ++++++++++ 2023/preset/day/package.json | 6 +++ 2023/preset/day/preset.ts | 14 +++++++ 2023/preset/day/templates/.gitkeep | 0 2023/preset/day/templates/perl/Part1.pm | 11 ++++++ 2023/preset/day/templates/perl/Part2.pm | 14 +++++++ 2023/preset/day/templates/perl/benchmark.pl | 41 +++++++++++++++++++++ 2023/preset/day/templates/perl/part1.t | 11 ++++++ 2023/preset/day/templates/perl/part2.t | 11 ++++++ 2023/preset/day/tsconfig.json | 18 +++++++++ 11 files changed, 146 insertions(+) create mode 100644 2023/preset/day/.gitignore create mode 100644 2023/preset/day/README.md create mode 100644 2023/preset/day/package.json create mode 100644 2023/preset/day/preset.ts create mode 100644 2023/preset/day/templates/.gitkeep create mode 100644 2023/preset/day/templates/perl/Part1.pm create mode 100644 2023/preset/day/templates/perl/Part2.pm create mode 100644 2023/preset/day/templates/perl/benchmark.pl create mode 100644 2023/preset/day/templates/perl/part1.t create mode 100644 2023/preset/day/templates/perl/part2.t create mode 100644 2023/preset/day/tsconfig.json diff --git a/2023/preset/day/.gitignore b/2023/preset/day/.gitignore new file mode 100644 index 0000000..3c3629e --- /dev/null +++ b/2023/preset/day/.gitignore @@ -0,0 +1 @@ +node_modules diff --git a/2023/preset/day/README.md b/2023/preset/day/README.md new file mode 100644 index 0000000..c513b01 --- /dev/null +++ b/2023/preset/day/README.md @@ -0,0 +1,19 @@ +

+
+ + Logo of Preset + +
+

+ +

day

+
npx @preset/cli apply username//home/yanick/work/javascript/adventofcode/2023/preset/day
+ +
+ +
+ This preset was made by Yanick Champoux. +
+
+ Learn more +
diff --git a/2023/preset/day/package.json b/2023/preset/day/package.json new file mode 100644 index 0000000..850e04c --- /dev/null +++ b/2023/preset/day/package.json @@ -0,0 +1,6 @@ +{ + "private": true, + "author": "Yanick Champoux ", + "license": "MIT", + "preset": "preset.ts" +} diff --git a/2023/preset/day/preset.ts b/2023/preset/day/preset.ts new file mode 100644 index 0000000..163677f --- /dev/null +++ b/2023/preset/day/preset.ts @@ -0,0 +1,14 @@ +export default definePreset({ + name: 'day', + options: { + perl: true, + }, + handler: async(context) => { + if( context.options.perl ) { + await extractTemplates({ + from: 'perl', whenConflict: 'skip' + }) + } + // ... + }, +}) diff --git a/2023/preset/day/templates/.gitkeep b/2023/preset/day/templates/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/2023/preset/day/templates/perl/Part1.pm b/2023/preset/day/templates/perl/Part1.pm new file mode 100644 index 0000000..c9b4e65 --- /dev/null +++ b/2023/preset/day/templates/perl/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/preset/day/templates/perl/Part2.pm b/2023/preset/day/templates/perl/Part2.pm new file mode 100644 index 0000000..c907947 --- /dev/null +++ b/2023/preset/day/templates/perl/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/preset/day/templates/perl/benchmark.pl b/2023/preset/day/templates/perl/benchmark.pl new file mode 100644 index 0000000..a01b63b --- /dev/null +++ b/2023/preset/day/templates/perl/benchmark.pl @@ -0,0 +1,41 @@ +use 5.38.0; + +use Benchmark ':hireswallclock'; +use Path::Tiny; +use JSON qw/ to_json /; +use DateTime; + +use Part1; +use Part2; + +my $day = path('.')->absolute->basename =~ s/^0//r; +my $year = path('.')->absolute->dir->basename; + +my @parts = ( + { part => 1, sub => \&Part1::solution_1, expected => 'TODO' }, + { part => 2, sub => \&Part2::solution_2, expected => 'TODO' }, +); + +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/preset/day/templates/perl/part1.t b/2023/preset/day/templates/perl/part1.t new file mode 100644 index 0000000..d09f96c --- /dev/null +++ b/2023/preset/day/templates/perl/part1.t @@ -0,0 +1,11 @@ +use 5.38.0; + +use Test2::V0; + +use Path::Tiny; + +use Part1; + +my $input = path('input')->slurp; + +is Part1::solution_1($input) => 'TODO'; diff --git a/2023/preset/day/templates/perl/part2.t b/2023/preset/day/templates/perl/part2.t new file mode 100644 index 0000000..41be8ed --- /dev/null +++ b/2023/preset/day/templates/perl/part2.t @@ -0,0 +1,11 @@ +use 5.38.0; + +use Test2::V0; + +use Path::Tiny; + +use Part2; + +my $input = path('input')->slurp; + +is Part2::solution_2($input) => 'TODO'; diff --git a/2023/preset/day/tsconfig.json b/2023/preset/day/tsconfig.json new file mode 100644 index 0000000..5dcab8a --- /dev/null +++ b/2023/preset/day/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "module": "esnext", + "baseUrl": ".", + "target": "es2016", + "lib": ["esnext"], + "esModuleInterop": true, + "skipLibCheck": true, + "moduleResolution": "node", + "resolveJsonModule": true, + "types": ["node", "@preset/core/globals"] + }, + "include": [ + "./*.ts", + "./src/**/*.ts" + ], + "exclude": ["templates", "node_modules"] +} From 7b44d73c50a4bdc884e2acfb43588151f5ec335d Mon Sep 17 00:00:00 2001 From: Yanick Champoux Date: Sat, 2 Dec 2023 11:17:13 -0500 Subject: [PATCH 3/8] it begins --- 2023/02/Part1.pm | 14 ++++++++++++++ 2023/02/part1.t | 7 +++++++ 2 files changed, 21 insertions(+) diff --git a/2023/02/Part1.pm b/2023/02/Part1.pm index c9b4e65..08269d2 100644 --- a/2023/02/Part1.pm +++ b/2023/02/Part1.pm @@ -4,6 +4,20 @@ package Part1; use List::AllUtils qw/ /; +sub parse_line($line) { + my %data; + $line =~ s/Game (\d+)://; + $data{game} = $1; + + my @entries = split ';', $line; + + $data{entries} = [ + map { +{ map { /(\d+) (\w+)/; $2 => $1 } split ",", $_ } } @entries + ]; + + return \%data; +} + sub solution_1 ($input) { ...; } diff --git a/2023/02/part1.t b/2023/02/part1.t index d09f96c..cfd3549 100644 --- a/2023/02/part1.t +++ b/2023/02/part1.t @@ -6,6 +6,13 @@ use Path::Tiny; use Part1; + +is Part1::parse_line("Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green") => +{ game => 1, entries => [ + { blue => 3, red => 4 }, { red => 1, green => 2, blue => 6}, + { green => 2 }, +]}; + + my $input = path('input')->slurp; is Part1::solution_1($input) => 'TODO'; From 3363c9894308870479474e6ced0c803eb928b4a5 Mon Sep 17 00:00:00 2001 From: Yanick Champoux Date: Sat, 2 Dec 2023 11:28:35 -0500 Subject: [PATCH 4/8] part 1 done --- 2023/02/Part1.pm | 17 +++++++++++++++-- 2023/02/part1.t | 11 ++++++++++- 2023/02/solutions.yml | 1 + 3 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 2023/02/solutions.yml diff --git a/2023/02/Part1.pm b/2023/02/Part1.pm index 08269d2..85563ac 100644 --- a/2023/02/Part1.pm +++ b/2023/02/Part1.pm @@ -2,7 +2,7 @@ use 5.38.0; package Part1; -use List::AllUtils qw/ /; +use List::AllUtils qw/ max sum /; sub parse_line($line) { my %data; @@ -18,8 +18,21 @@ sub parse_line($line) { 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) { - ...; + sum + map { $_->{game} } + grep { $_->{red} <= 12 and $_->{blue} <= 14 and $_->{green} <= 13 } + map { aggregate_entries($_) } + map { parse_line($_)} + split "\n", $input; } 1; diff --git a/2023/02/part1.t b/2023/02/part1.t index cfd3549..043b842 100644 --- a/2023/02/part1.t +++ b/2023/02/part1.t @@ -12,7 +12,16 @@ is Part1::parse_line("Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green") = { green => 2 }, ]}; +is Part1::solution_1( <<'END' ) => 8; +Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green +Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue +Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red +Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red +Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green +END my $input = path('input')->slurp; -is Part1::solution_1($input) => 'TODO'; +is Part1::solution_1($input) => 1853; + +done_testing(); diff --git a/2023/02/solutions.yml b/2023/02/solutions.yml new file mode 100644 index 0000000..c3bce71 --- /dev/null +++ b/2023/02/solutions.yml @@ -0,0 +1 @@ +1: 1853 From b29e4a9a60ec30f56c65ad39e1c0b3d3743e8e1f Mon Sep 17 00:00:00 2001 From: Yanick Champoux Date: Sat, 2 Dec 2023 11:41:31 -0500 Subject: [PATCH 5/8] part 2 --- 2023/02/Part2.pm | 9 ++++++--- 2023/02/benchmark.pl | 10 +++++++--- 2023/02/part2.t | 9 +++++++++ 2023/02/solutions.yml | 1 + 2023/benchmark.json | 10 ++++++---- 5 files changed, 29 insertions(+), 10 deletions(-) diff --git a/2023/02/Part2.pm b/2023/02/Part2.pm index c907947..dbdb6fd 100644 --- a/2023/02/Part2.pm +++ b/2023/02/Part2.pm @@ -4,11 +4,14 @@ package Part2; use Part1; -use List::AllUtils qw/ /; - +use List::AllUtils qw/ min product sum /; sub solution_2 ($input) { - ...; + sum + map { product $_->@{qw/ red blue green /}} + map { Part1::aggregate_entries($_) } + map { Part1::parse_line($_)} + split "\n", $input; } 1; diff --git a/2023/02/benchmark.pl b/2023/02/benchmark.pl index a01b63b..6791afb 100644 --- a/2023/02/benchmark.pl +++ b/2023/02/benchmark.pl @@ -4,16 +4,19 @@ use Benchmark ':hireswallclock'; use Path::Tiny; use JSON qw/ to_json /; use DateTime; +use File::Serialize; use Part1; use Part2; +my $solutions = deserialize_file('solutions.yml'); + my $day = path('.')->absolute->basename =~ s/^0//r; -my $year = path('.')->absolute->dir->basename; +my $year = path('.')->absolute->parent->basename; 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; @@ -34,6 +37,7 @@ for my $part (@parts) { language => 'perl', part => $part->{part}, time => $res->cpu_a / $res->iters, + parsec =>$res->iters/$res->cpu_a , timestamp => DateTime->now->iso8601, }; say to_json $result; diff --git a/2023/02/part2.t b/2023/02/part2.t index 41be8ed..740a766 100644 --- a/2023/02/part2.t +++ b/2023/02/part2.t @@ -6,6 +6,15 @@ use Path::Tiny; use Part2; +is Part2::solution_2( <<'END' ) => 2286; +Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green +Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue +Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red +Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red +Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green +END + my $input = path('input')->slurp; +cmp_ok Part2::solution_2($input), ">", 1720; is Part2::solution_2($input) => 'TODO'; diff --git a/2023/02/solutions.yml b/2023/02/solutions.yml index c3bce71..51c2a15 100644 --- a/2023/02/solutions.yml +++ b/2023/02/solutions.yml @@ -1 +1,2 @@ 1: 1853 +2: 72706 diff --git a/2023/benchmark.json b/2023/benchmark.json index bdd5f2b..7543b09 100644 --- a/2023/benchmark.json +++ b/2023/benchmark.json @@ -1,4 +1,6 @@ -{"language":"perl","time":0.00189813978688821,"part":1,"day":1,"year":2023,"timestamp":"2023-12-01T17:35:46"} -{"language":"perl","part":2,"time":0.00721379310344828,"day":1,"year":2023,"timestamp":"2023-12-01T17:35:58"} -{"day":1,"year":2023,"language":"javascript","part":"1","timestamp":"2023-12-01T20:55:40.986Z","time":0.0007267522645031297} -{"day":1,"year":2023,"language":"javascript","part":"2","timestamp":"2023-12-01T20:55:40.989Z","time":0.004363576172638605} +{"language":"perl","time":0.00189813978688821,"part":1,"day":1,"year":2023,"timestamp":"2023-12-01T17:35:46","persec":526.8315889628915} +{"language":"perl","part":2,"time":0.00721379310344828,"day":1,"year":2023,"timestamp":"2023-12-01T17:35:58","persec":138.62332695984696} +{"day":1,"year":2023,"language":"javascript","part":"1","timestamp":"2023-12-01T20:55:40.986Z","time":0.0007267522645031297,"persec":1375.9847046141451} +{"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","parsec":297.067171239357,"year":"2023","time":0.00336624203821656} +{"language":"perl","timestamp":"2023-12-02T16:40:55","part":2,"day":"2","time":0.00338658146964856,"year":"2023","parsec":295.283018867925} From 57b7b318b49177a53153c8b93be95e1ef82d5c06 Mon Sep 17 00:00:00 2001 From: Yanick Champoux Date: Sat, 2 Dec 2023 13:21:36 -0500 Subject: [PATCH 6/8] fixup! part 2 --- 2023/benchmark.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/2023/benchmark.json b/2023/benchmark.json index 7543b09..0989ab5 100644 --- a/2023/benchmark.json +++ b/2023/benchmark.json @@ -2,5 +2,5 @@ {"language":"perl","part":2,"time":0.00721379310344828,"day":1,"year":2023,"timestamp":"2023-12-01T17:35:58","persec":138.62332695984696} {"day":1,"year":2023,"language":"javascript","part":"1","timestamp":"2023-12-01T20:55:40.986Z","time":0.0007267522645031297,"persec":1375.9847046141451} {"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","parsec":297.067171239357,"year":"2023","time":0.00336624203821656} -{"language":"perl","timestamp":"2023-12-02T16:40:55","part":2,"day":"2","time":0.00338658146964856,"year":"2023","parsec":295.283018867925} +{"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} From 4c98ac6a61e0447e282ac3f576d751a20bd83c99 Mon Sep 17 00:00:00 2001 From: Yanick Champoux Date: Sat, 2 Dec 2023 13:30:04 -0500 Subject: [PATCH 7/8] version 2 --- 2023/02/Part1.pm | 17 ++--------------- 2023/02/Part2.pm | 1 - 2023/02/benchmark.pl | 2 +- 2023/02/part1.t | 7 +++---- 2023/02/part2.t | 2 +- 2023/benchmark.json | 2 ++ 6 files changed, 9 insertions(+), 22 deletions(-) diff --git a/2023/02/Part1.pm b/2023/02/Part1.pm index 85563ac..60d9706 100644 --- a/2023/02/Part1.pm +++ b/2023/02/Part1.pm @@ -6,31 +6,18 @@ use List::AllUtils qw/ max sum /; sub parse_line($line) { my %data; - $line =~ s/Game (\d+)://; + $line =~ /Game (\d+):/; $data{game} = $1; - my @entries = split ';', $line; - - $data{entries} = [ - map { +{ map { /(\d+) (\w+)/; $2 => $1 } split ",", $_ } } @entries - ]; + $data{$_} = max $line =~ /(\d+) $_/g for qw/ red green blue /; 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) { sum map { $_->{game} } grep { $_->{red} <= 12 and $_->{blue} <= 14 and $_->{green} <= 13 } - map { aggregate_entries($_) } map { parse_line($_)} split "\n", $input; } diff --git a/2023/02/Part2.pm b/2023/02/Part2.pm index dbdb6fd..d8dd1df 100644 --- a/2023/02/Part2.pm +++ b/2023/02/Part2.pm @@ -9,7 +9,6 @@ use List::AllUtils qw/ min product sum /; sub solution_2 ($input) { sum map { product $_->@{qw/ red blue green /}} - map { Part1::aggregate_entries($_) } map { Part1::parse_line($_)} split "\n", $input; } diff --git a/2023/02/benchmark.pl b/2023/02/benchmark.pl index 6791afb..c1e2fdf 100644 --- a/2023/02/benchmark.pl +++ b/2023/02/benchmark.pl @@ -33,7 +33,7 @@ for my $part (@parts) { day => $day, year => $year, - #variant => '', + variant => 'v2', language => 'perl', part => $part->{part}, time => $res->cpu_a / $res->iters, diff --git a/2023/02/part1.t b/2023/02/part1.t index 043b842..94460f6 100644 --- a/2023/02/part1.t +++ b/2023/02/part1.t @@ -7,10 +7,9 @@ use Path::Tiny; use Part1; -is Part1::parse_line("Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green") => +{ game => 1, entries => [ - { blue => 3, red => 4 }, { red => 1, green => 2, blue => 6}, - { green => 2 }, -]}; +is Part1::parse_line("Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green") => +{ game => 1, + blue => 6, red => 4, green => 2 +}; is Part1::solution_1( <<'END' ) => 8; Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green diff --git a/2023/02/part2.t b/2023/02/part2.t index 740a766..f8552e6 100644 --- a/2023/02/part2.t +++ b/2023/02/part2.t @@ -17,4 +17,4 @@ END my $input = path('input')->slurp; cmp_ok Part2::solution_2($input), ">", 1720; -is Part2::solution_2($input) => 'TODO'; +is Part2::solution_2($input) => 72706; diff --git a/2023/benchmark.json b/2023/benchmark.json index 0989ab5..5616bda 100644 --- a/2023/benchmark.json +++ b/2023/benchmark.json @@ -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} {"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} +{"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} From c1984999cfce793db4aa3bb257d72905f26a8ef0 Mon Sep 17 00:00:00 2001 From: Yanick Champoux Date: Sat, 2 Dec 2023 13:32:51 -0500 Subject: [PATCH 8/8] tidy --- 2023/02/Part1.pm | 12 ++++++------ 2023/02/Part2.pm | 6 +++--- 2023/02/part1.t | 11 +++++++---- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/2023/02/Part1.pm b/2023/02/Part1.pm index 60d9706..9186d54 100644 --- a/2023/02/Part1.pm +++ b/2023/02/Part1.pm @@ -4,10 +4,10 @@ package Part1; use List::AllUtils qw/ max sum /; -sub parse_line($line) { +sub parse_line ($line) { my %data; $line =~ /Game (\d+):/; - $data{game} = $1; + $data{game} = $1; $data{$_} = max $line =~ /(\d+) $_/g for qw/ red green blue /; @@ -16,10 +16,10 @@ sub parse_line($line) { sub solution_1 ($input) { sum - map { $_->{game} } - grep { $_->{red} <= 12 and $_->{blue} <= 14 and $_->{green} <= 13 } - map { parse_line($_)} - split "\n", $input; + map { $_->{game} } + grep { $_->{red} <= 12 and $_->{blue} <= 14 and $_->{green} <= 13 } + map { parse_line($_) } + split "\n", $input; } 1; diff --git a/2023/02/Part2.pm b/2023/02/Part2.pm index d8dd1df..b5d60e1 100644 --- a/2023/02/Part2.pm +++ b/2023/02/Part2.pm @@ -8,9 +8,9 @@ use List::AllUtils qw/ min product sum /; sub solution_2 ($input) { sum - map { product $_->@{qw/ red blue green /}} - map { Part1::parse_line($_)} - split "\n", $input; + map { product $_->@{qw/ red blue green /} } + map { Part1::parse_line($_) } + split "\n", $input; } 1; diff --git a/2023/02/part1.t b/2023/02/part1.t index 94460f6..a9a0f8f 100644 --- a/2023/02/part1.t +++ b/2023/02/part1.t @@ -6,10 +6,13 @@ use Path::Tiny; use Part1; - -is Part1::parse_line("Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green") => +{ game => 1, - blue => 6, red => 4, green => 2 -}; +is Part1::parse_line( + "Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green") => +{ + game => 1, + blue => 6, + red => 4, + green => 2 + }; is Part1::solution_1( <<'END' ) => 8; Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green