From b490fdbec2abe1c2c620a75de6e14a6f83bc7317 Mon Sep 17 00:00:00 2001 From: Mark Anderson Date: Sun, 23 Jun 2024 19:29:37 +0000 Subject: Challenge 274 Solutions (Raku) --- challenge-274/mark-anderson/raku/ch-1.raku | 2 +- challenge-274/mark-anderson/raku/ch-2.raku | 33 ++++++++---------------------- 2 files changed, 10 insertions(+), 25 deletions(-) diff --git a/challenge-274/mark-anderson/raku/ch-1.raku b/challenge-274/mark-anderson/raku/ch-1.raku index 63616835e6..f8e03dc39a 100644 --- a/challenge-274/mark-anderson/raku/ch-1.raku +++ b/challenge-274/mark-anderson/raku/ch-1.raku @@ -5,7 +5,7 @@ grammar Goat-Latin { has @.words; - token TOP { [<.vowel> || <.consonant>]* % ' ' } + token TOP { [<.vowel> || <.consonant>]* % ' ' } token vowel { :i <[aeiou]> <.alpha>* { @.words.push: ~$/ ~ "maa" ~ "a" x @.words } } token consonant { :i <-[aeiou]> <.alpha>* { @.words.push: ~$/.comb.rotate.join ~ "maa" ~ "a" x @.words } } } diff --git a/challenge-274/mark-anderson/raku/ch-2.raku b/challenge-274/mark-anderson/raku/ch-2.raku index 5947529783..b57d36d2bb 100644 --- a/challenge-274/mark-anderson/raku/ch-2.raku +++ b/challenge-274/mark-anderson/raku/ch-2.raku @@ -6,34 +6,19 @@ is-deeply bus-route([[12,3,41],[15,9,35],[30,5,25]]), (0,1,2,3,25,26,27,40,41,42 sub bus-route(@r) { - @r .= map(&schedule); - - gather for ^60 [Z] [Z] @r -> ($minute, $routes) + gather for ^60 -> $minute { - given $routes.sort({ abs($minute - .), . }) -> $routes - { - my @arrivals = $routes>>.; - - if @arrivals.head >= 60 - { - @arrivals = @arrivals >>mod>> 60 - } + my $arrivals := @r.map({ schedule($_, $minute) }) + .sort({ .[0], .[1] }) + .map({ .[1] }); - next if @arrivals.head == @arrivals.min; - - take $minute - } + take $minute if $arrivals[0] > any($arrivals[1..*]) } } -sub schedule([$interval, $depart, $duration]) +sub schedule([$interval, $depart, $duration], $minute) { - my $departures := $depart, $depart + $interval...60; - - my $schedule = do for flat map { $_ xx $interval }, $departures - { - .Map given :depart($_), :arrive($_ + $duration) - } - - $schedule.rotate($interval - $depart - 1) + my $departures := $depart, $depart + $interval ... 1000; + my $next = $departures.first(* >= $minute); + $next, $next + $duration } -- cgit