From cd0c3ff08363677d253922760e01a6a96c0d2d4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=ADle=20Ekaterin=20Liszka?= Date: Wed, 6 Dec 2023 09:57:47 -0800 Subject: [PATCH] AoC 2023 day 6 --- 6/a.pl | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 6/b.pl | 50 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 111 insertions(+) create mode 100755 6/a.pl create mode 100755 6/b.pl diff --git a/6/a.pl b/6/a.pl new file mode 100755 index 0000000..6b14dfa --- /dev/null +++ b/6/a.pl @@ -0,0 +1,61 @@ +#!/usr/bin/env perl +# Copyright 2023 Síle Ekaterin Liszka +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +use strict; +use warnings; +use feature qw(:5.36); +use autodie; + +use List::Util qw(reduce); + +open my $fh, '<', 'input.txt'; + +my $data = ''; +{ + local $/; + $data = <$fh>; + chomp $data; +} +my ($times, $distances) = split /\n/, $data, 2; + +my @times = split / +/, $times; +shift @times; +my @distances = split / +/, $distances; +shift @distances; + +sub calc_combos($time, $target) { + my $ret = 0; + for my $i (1 .. ($time - 1)) { + my $travel = ($time - $i) * $i; + $ret++ if ($travel > $target); + } + return $ret; +} + +my @combos; +for my $race (0 .. $#times) { + my $time = $times[$race]; + my $target = $distances[$race]; + push @combos, calc_combos($time, $target); +} + +say join(' ', @combos); +say reduce { $a * $b } @combos; diff --git a/6/b.pl b/6/b.pl new file mode 100755 index 0000000..2713e18 --- /dev/null +++ b/6/b.pl @@ -0,0 +1,50 @@ +#!/usr/bin/env perl +# Copyright 2023 Síle Ekaterin Liszka +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +use strict; +use warnings; +use feature qw(:5.36); +use autodie; + +use List::Util qw(reduce); + +open my $fh, '<', 'input.txt'; + +my $data = ''; +{ + local $/; + $data = <$fh>; + chomp $data; +} +my ($time, $distance) = split /\n/, $data, 2; +$time =~ s/[^0-9]+//g; +$distance =~ s/[^0-9]+//g; + +sub calc_combos($time, $target) { + my $ret = 0; + for my $i (1 .. ($time - 1)) { + my $travel = ($time - $i) * $i; + $ret++ if ($travel > $target); + } + return $ret; +} + +say calc_combos($time, $distance);