From dceba3ad4c0483abc5a3ca32b6658333d7b387dd Mon Sep 17 00:00:00 2001 From: arnesom Date: Sun, 23 Jun 2024 18:31:41 +0200 Subject: Arne Sommer --- challenge-005/arne-sommer/#blog.txt# | 1 + challenge-005/arne-sommer/blog.txt | 2 +- challenge-005/arne-sommer/raku/bus-route | 80 +++++++++++++++++++++++++++++++ challenge-005/arne-sommer/raku/ch-1.raku | 16 +++++++ challenge-005/arne-sommer/raku/ch-2.raku | 80 +++++++++++++++++++++++++++++++ challenge-005/arne-sommer/raku/goat-latin | 16 +++++++ 6 files changed, 194 insertions(+), 1 deletion(-) create mode 100644 challenge-005/arne-sommer/#blog.txt# create mode 100755 challenge-005/arne-sommer/raku/bus-route create mode 100755 challenge-005/arne-sommer/raku/ch-1.raku create mode 100755 challenge-005/arne-sommer/raku/ch-2.raku create mode 100755 challenge-005/arne-sommer/raku/goat-latin diff --git a/challenge-005/arne-sommer/#blog.txt# b/challenge-005/arne-sommer/#blog.txt# new file mode 100644 index 0000000000..41b8948747 --- /dev/null +++ b/challenge-005/arne-sommer/#blog.txt# @@ -0,0 +1 @@ +https://perl6.eu/anagrams.html diff --git a/challenge-005/arne-sommer/blog.txt b/challenge-005/arne-sommer/blog.txt index 41b8948747..0ca62becb1 100644 --- a/challenge-005/arne-sommer/blog.txt +++ b/challenge-005/arne-sommer/blog.txt @@ -1 +1 @@ -https://perl6.eu/anagrams.html +https://raku-musings.com/goat-bus.html diff --git a/challenge-005/arne-sommer/raku/bus-route b/challenge-005/arne-sommer/raku/bus-route new file mode 100755 index 0000000000..10e7b013d7 --- /dev/null +++ b/challenge-005/arne-sommer/raku/bus-route @@ -0,0 +1,80 @@ +#! /usr/bin/env raku + +unit sub MAIN (Str $routestr = "12 11 41 | 15 5 35", :v(:$verbose)); + +my @routes = $routestr.split("|")>>.words>>.Numeric; + +die "All the routes must have three integers each" unless all(@routes>>.elems) == 3; +die "Non-negative integers only" unless all(@routes[*;*]) ~~ UInt; + +my @departures; + +for @routes -> @route +{ + state $rid = 0; $rid++; + my $interval = @route[0]; + my $offset = @route[1]; + my $duration = @route[2]; + + say ": Route: $rid Interval: $interval Offset: $offset Duration: $duration" if $verbose; + + die "Route $rid: Interval does not comply with 60 min rule" unless 60 %% $interval; + die "Route $rid: Interval must be positive" unless $interval > 0; + + my $min = $offset; + + while $min < 60 + { + @departures.push: { dept => $min, route => $rid, arrival => $min + $duration }; + + $min += $interval; + } +} + +my @sorted = @departures.sort({ $^a <=> $^b || $^a <=> $^b || $^a <=> $^b }); + +if $verbose +{ + for @sorted -> %dep + { + say ": Departure at { %dep.fmt('%02d') }: route %dep arrive at %dep"; + } +} + +exit if $verbose && $verbose eq '2'; + +my @skip; + +for 0 .. 59 -> $min +{ + my @todo = @sorted.grep( * >= $min ); + + unless @todo.elems + { + if @skip && @skip[0] == 0 + { + @skip.push: $min; + say ": Min:$min (no more departures this hour, and we skipped the first one this hour) * skip" if $verbose; + } + elsif $verbose + { + say ": Min:$min (no more departures this hour, and we took the first one this hour) - first"; + } + next; + } + + my %first = @todo.shift; + my %wait_to = %first; + + for @todo -> %dept + { + %wait_to = %dept if %dept < %wait_to; + } + + my $ok = %first eqv %wait_to; + + @skip.push: $min if !$ok; + say ": Min:{ $min.fmt('%02d') }: { $min == %wait_to ?? "" !! "wait to %wait_to" } take route %wait_to and arrive at %wait_to { $ok ?? "- first" !! "* skip" }" if $verbose; +} + +say "[{ @skip.join(", ") }]"; diff --git a/challenge-005/arne-sommer/raku/ch-1.raku b/challenge-005/arne-sommer/raku/ch-1.raku new file mode 100755 index 0000000000..101b68ecc3 --- /dev/null +++ b/challenge-005/arne-sommer/raku/ch-1.raku @@ -0,0 +1,16 @@ +#! /usr/bin/env raku + +unit sub MAIN ($sentence where $sentence.chars > 0); + +say $sentence.words.map( *.&goatify-word ).join(" "); + +sub goatify-word ($word is copy) +{ + state $add = 2; + + $word = $word.substr(1) ~ $word.substr(0,1) if $word !~~ /^<[aeiou]>/; + + $word ~= "m" ~ "a" x $add++; + + return $word; +} diff --git a/challenge-005/arne-sommer/raku/ch-2.raku b/challenge-005/arne-sommer/raku/ch-2.raku new file mode 100755 index 0000000000..10e7b013d7 --- /dev/null +++ b/challenge-005/arne-sommer/raku/ch-2.raku @@ -0,0 +1,80 @@ +#! /usr/bin/env raku + +unit sub MAIN (Str $routestr = "12 11 41 | 15 5 35", :v(:$verbose)); + +my @routes = $routestr.split("|")>>.words>>.Numeric; + +die "All the routes must have three integers each" unless all(@routes>>.elems) == 3; +die "Non-negative integers only" unless all(@routes[*;*]) ~~ UInt; + +my @departures; + +for @routes -> @route +{ + state $rid = 0; $rid++; + my $interval = @route[0]; + my $offset = @route[1]; + my $duration = @route[2]; + + say ": Route: $rid Interval: $interval Offset: $offset Duration: $duration" if $verbose; + + die "Route $rid: Interval does not comply with 60 min rule" unless 60 %% $interval; + die "Route $rid: Interval must be positive" unless $interval > 0; + + my $min = $offset; + + while $min < 60 + { + @departures.push: { dept => $min, route => $rid, arrival => $min + $duration }; + + $min += $interval; + } +} + +my @sorted = @departures.sort({ $^a <=> $^b || $^a <=> $^b || $^a <=> $^b }); + +if $verbose +{ + for @sorted -> %dep + { + say ": Departure at { %dep.fmt('%02d') }: route %dep arrive at %dep"; + } +} + +exit if $verbose && $verbose eq '2'; + +my @skip; + +for 0 .. 59 -> $min +{ + my @todo = @sorted.grep( * >= $min ); + + unless @todo.elems + { + if @skip && @skip[0] == 0 + { + @skip.push: $min; + say ": Min:$min (no more departures this hour, and we skipped the first one this hour) * skip" if $verbose; + } + elsif $verbose + { + say ": Min:$min (no more departures this hour, and we took the first one this hour) - first"; + } + next; + } + + my %first = @todo.shift; + my %wait_to = %first; + + for @todo -> %dept + { + %wait_to = %dept if %dept < %wait_to; + } + + my $ok = %first eqv %wait_to; + + @skip.push: $min if !$ok; + say ": Min:{ $min.fmt('%02d') }: { $min == %wait_to ?? "" !! "wait to %wait_to" } take route %wait_to and arrive at %wait_to { $ok ?? "- first" !! "* skip" }" if $verbose; +} + +say "[{ @skip.join(", ") }]"; diff --git a/challenge-005/arne-sommer/raku/goat-latin b/challenge-005/arne-sommer/raku/goat-latin new file mode 100755 index 0000000000..101b68ecc3 --- /dev/null +++ b/challenge-005/arne-sommer/raku/goat-latin @@ -0,0 +1,16 @@ +#! /usr/bin/env raku + +unit sub MAIN ($sentence where $sentence.chars > 0); + +say $sentence.words.map( *.&goatify-word ).join(" "); + +sub goatify-word ($word is copy) +{ + state $add = 2; + + $word = $word.substr(1) ~ $word.substr(0,1) if $word !~~ /^<[aeiou]>/; + + $word ~= "m" ~ "a" x $add++; + + return $word; +} -- cgit From 86085f6cb2772e0c60152980223f96b1e586fd62 Mon Sep 17 00:00:00 2001 From: arnesom Date: Sun, 23 Jun 2024 18:32:34 +0200 Subject: Arne Sommer --- challenge-005/arne-sommer/#blog.txt# | 1 - 1 file changed, 1 deletion(-) delete mode 100644 challenge-005/arne-sommer/#blog.txt# diff --git a/challenge-005/arne-sommer/#blog.txt# b/challenge-005/arne-sommer/#blog.txt# deleted file mode 100644 index 41b8948747..0000000000 --- a/challenge-005/arne-sommer/#blog.txt# +++ /dev/null @@ -1 +0,0 @@ -https://perl6.eu/anagrams.html -- cgit From c1a5e4655ae3717126bb9a59bd00539372d4a041 Mon Sep 17 00:00:00 2001 From: arnesom Date: Sun, 23 Jun 2024 18:40:45 +0200 Subject: Arne Sommer --- challenge-005/arne-sommer/raku/bus-route | 80 ------------------------------- challenge-005/arne-sommer/raku/ch-1.raku | 16 ------- challenge-005/arne-sommer/raku/ch-2.raku | 80 ------------------------------- challenge-005/arne-sommer/raku/goat-latin | 16 ------- challenge-274/arne-sommer/blog.txt | 1 + challenge-274/arne-sommer/raku/bus-route | 80 +++++++++++++++++++++++++++++++ challenge-274/arne-sommer/raku/ch-1.raku | 16 +++++++ challenge-274/arne-sommer/raku/ch-2.raku | 80 +++++++++++++++++++++++++++++++ challenge-274/arne-sommer/raku/goat-latin | 16 +++++++ 9 files changed, 193 insertions(+), 192 deletions(-) delete mode 100755 challenge-005/arne-sommer/raku/bus-route delete mode 100755 challenge-005/arne-sommer/raku/ch-1.raku delete mode 100755 challenge-005/arne-sommer/raku/ch-2.raku delete mode 100755 challenge-005/arne-sommer/raku/goat-latin create mode 100644 challenge-274/arne-sommer/blog.txt create mode 100755 challenge-274/arne-sommer/raku/bus-route create mode 100755 challenge-274/arne-sommer/raku/ch-1.raku create mode 100755 challenge-274/arne-sommer/raku/ch-2.raku create mode 100755 challenge-274/arne-sommer/raku/goat-latin diff --git a/challenge-005/arne-sommer/raku/bus-route b/challenge-005/arne-sommer/raku/bus-route deleted file mode 100755 index 10e7b013d7..0000000000 --- a/challenge-005/arne-sommer/raku/bus-route +++ /dev/null @@ -1,80 +0,0 @@ -#! /usr/bin/env raku - -unit sub MAIN (Str $routestr = "12 11 41 | 15 5 35", :v(:$verbose)); - -my @routes = $routestr.split("|")>>.words>>.Numeric; - -die "All the routes must have three integers each" unless all(@routes>>.elems) == 3; -die "Non-negative integers only" unless all(@routes[*;*]) ~~ UInt; - -my @departures; - -for @routes -> @route -{ - state $rid = 0; $rid++; - my $interval = @route[0]; - my $offset = @route[1]; - my $duration = @route[2]; - - say ": Route: $rid Interval: $interval Offset: $offset Duration: $duration" if $verbose; - - die "Route $rid: Interval does not comply with 60 min rule" unless 60 %% $interval; - die "Route $rid: Interval must be positive" unless $interval > 0; - - my $min = $offset; - - while $min < 60 - { - @departures.push: { dept => $min, route => $rid, arrival => $min + $duration }; - - $min += $interval; - } -} - -my @sorted = @departures.sort({ $^a <=> $^b || $^a <=> $^b || $^a <=> $^b }); - -if $verbose -{ - for @sorted -> %dep - { - say ": Departure at { %dep.fmt('%02d') }: route %dep arrive at %dep"; - } -} - -exit if $verbose && $verbose eq '2'; - -my @skip; - -for 0 .. 59 -> $min -{ - my @todo = @sorted.grep( * >= $min ); - - unless @todo.elems - { - if @skip && @skip[0] == 0 - { - @skip.push: $min; - say ": Min:$min (no more departures this hour, and we skipped the first one this hour) * skip" if $verbose; - } - elsif $verbose - { - say ": Min:$min (no more departures this hour, and we took the first one this hour) - first"; - } - next; - } - - my %first = @todo.shift; - my %wait_to = %first; - - for @todo -> %dept - { - %wait_to = %dept if %dept < %wait_to; - } - - my $ok = %first eqv %wait_to; - - @skip.push: $min if !$ok; - say ": Min:{ $min.fmt('%02d') }: { $min == %wait_to ?? "" !! "wait to %wait_to" } take route %wait_to and arrive at %wait_to { $ok ?? "- first" !! "* skip" }" if $verbose; -} - -say "[{ @skip.join(", ") }]"; diff --git a/challenge-005/arne-sommer/raku/ch-1.raku b/challenge-005/arne-sommer/raku/ch-1.raku deleted file mode 100755 index 101b68ecc3..0000000000 --- a/challenge-005/arne-sommer/raku/ch-1.raku +++ /dev/null @@ -1,16 +0,0 @@ -#! /usr/bin/env raku - -unit sub MAIN ($sentence where $sentence.chars > 0); - -say $sentence.words.map( *.&goatify-word ).join(" "); - -sub goatify-word ($word is copy) -{ - state $add = 2; - - $word = $word.substr(1) ~ $word.substr(0,1) if $word !~~ /^<[aeiou]>/; - - $word ~= "m" ~ "a" x $add++; - - return $word; -} diff --git a/challenge-005/arne-sommer/raku/ch-2.raku b/challenge-005/arne-sommer/raku/ch-2.raku deleted file mode 100755 index 10e7b013d7..0000000000 --- a/challenge-005/arne-sommer/raku/ch-2.raku +++ /dev/null @@ -1,80 +0,0 @@ -#! /usr/bin/env raku - -unit sub MAIN (Str $routestr = "12 11 41 | 15 5 35", :v(:$verbose)); - -my @routes = $routestr.split("|")>>.words>>.Numeric; - -die "All the routes must have three integers each" unless all(@routes>>.elems) == 3; -die "Non-negative integers only" unless all(@routes[*;*]) ~~ UInt; - -my @departures; - -for @routes -> @route -{ - state $rid = 0; $rid++; - my $interval = @route[0]; - my $offset = @route[1]; - my $duration = @route[2]; - - say ": Route: $rid Interval: $interval Offset: $offset Duration: $duration" if $verbose; - - die "Route $rid: Interval does not comply with 60 min rule" unless 60 %% $interval; - die "Route $rid: Interval must be positive" unless $interval > 0; - - my $min = $offset; - - while $min < 60 - { - @departures.push: { dept => $min, route => $rid, arrival => $min + $duration }; - - $min += $interval; - } -} - -my @sorted = @departures.sort({ $^a <=> $^b || $^a <=> $^b || $^a <=> $^b }); - -if $verbose -{ - for @sorted -> %dep - { - say ": Departure at { %dep.fmt('%02d') }: route %dep arrive at %dep"; - } -} - -exit if $verbose && $verbose eq '2'; - -my @skip; - -for 0 .. 59 -> $min -{ - my @todo = @sorted.grep( * >= $min ); - - unless @todo.elems - { - if @skip && @skip[0] == 0 - { - @skip.push: $min; - say ": Min:$min (no more departures this hour, and we skipped the first one this hour) * skip" if $verbose; - } - elsif $verbose - { - say ": Min:$min (no more departures this hour, and we took the first one this hour) - first"; - } - next; - } - - my %first = @todo.shift; - my %wait_to = %first; - - for @todo -> %dept - { - %wait_to = %dept if %dept < %wait_to; - } - - my $ok = %first eqv %wait_to; - - @skip.push: $min if !$ok; - say ": Min:{ $min.fmt('%02d') }: { $min == %wait_to ?? "" !! "wait to %wait_to" } take route %wait_to and arrive at %wait_to { $ok ?? "- first" !! "* skip" }" if $verbose; -} - -say "[{ @skip.join(", ") }]"; diff --git a/challenge-005/arne-sommer/raku/goat-latin b/challenge-005/arne-sommer/raku/goat-latin deleted file mode 100755 index 101b68ecc3..0000000000 --- a/challenge-005/arne-sommer/raku/goat-latin +++ /dev/null @@ -1,16 +0,0 @@ -#! /usr/bin/env raku - -unit sub MAIN ($sentence where $sentence.chars > 0); - -say $sentence.words.map( *.&goatify-word ).join(" "); - -sub goatify-word ($word is copy) -{ - state $add = 2; - - $word = $word.substr(1) ~ $word.substr(0,1) if $word !~~ /^<[aeiou]>/; - - $word ~= "m" ~ "a" x $add++; - - return $word; -} diff --git a/challenge-274/arne-sommer/blog.txt b/challenge-274/arne-sommer/blog.txt new file mode 100644 index 0000000000..0ca62becb1 --- /dev/null +++ b/challenge-274/arne-sommer/blog.txt @@ -0,0 +1 @@ +https://raku-musings.com/goat-bus.html diff --git a/challenge-274/arne-sommer/raku/bus-route b/challenge-274/arne-sommer/raku/bus-route new file mode 100755 index 0000000000..10e7b013d7 --- /dev/null +++ b/challenge-274/arne-sommer/raku/bus-route @@ -0,0 +1,80 @@ +#! /usr/bin/env raku + +unit sub MAIN (Str $routestr = "12 11 41 | 15 5 35", :v(:$verbose)); + +my @routes = $routestr.split("|")>>.words>>.Numeric; + +die "All the routes must have three integers each" unless all(@routes>>.elems) == 3; +die "Non-negative integers only" unless all(@routes[*;*]) ~~ UInt; + +my @departures; + +for @routes -> @route +{ + state $rid = 0; $rid++; + my $interval = @route[0]; + my $offset = @route[1]; + my $duration = @route[2]; + + say ": Route: $rid Interval: $interval Offset: $offset Duration: $duration" if $verbose; + + die "Route $rid: Interval does not comply with 60 min rule" unless 60 %% $interval; + die "Route $rid: Interval must be positive" unless $interval > 0; + + my $min = $offset; + + while $min < 60 + { + @departures.push: { dept => $min, route => $rid, arrival => $min + $duration }; + + $min += $interval; + } +} + +my @sorted = @departures.sort({ $^a <=> $^b || $^a <=> $^b || $^a <=> $^b }); + +if $verbose +{ + for @sorted -> %dep + { + say ": Departure at { %dep.fmt('%02d') }: route %dep arrive at %dep"; + } +} + +exit if $verbose && $verbose eq '2'; + +my @skip; + +for 0 .. 59 -> $min +{ + my @todo = @sorted.grep( * >= $min ); + + unless @todo.elems + { + if @skip && @skip[0] == 0 + { + @skip.push: $min; + say ": Min:$min (no more departures this hour, and we skipped the first one this hour) * skip" if $verbose; + } + elsif $verbose + { + say ": Min:$min (no more departures this hour, and we took the first one this hour) - first"; + } + next; + } + + my %first = @todo.shift; + my %wait_to = %first; + + for @todo -> %dept + { + %wait_to = %dept if %dept < %wait_to; + } + + my $ok = %first eqv %wait_to; + + @skip.push: $min if !$ok; + say ": Min:{ $min.fmt('%02d') }: { $min == %wait_to ?? "" !! "wait to %wait_to" } take route %wait_to and arrive at %wait_to { $ok ?? "- first" !! "* skip" }" if $verbose; +} + +say "[{ @skip.join(", ") }]"; diff --git a/challenge-274/arne-sommer/raku/ch-1.raku b/challenge-274/arne-sommer/raku/ch-1.raku new file mode 100755 index 0000000000..101b68ecc3 --- /dev/null +++ b/challenge-274/arne-sommer/raku/ch-1.raku @@ -0,0 +1,16 @@ +#! /usr/bin/env raku + +unit sub MAIN ($sentence where $sentence.chars > 0); + +say $sentence.words.map( *.&goatify-word ).join(" "); + +sub goatify-word ($word is copy) +{ + state $add = 2; + + $word = $word.substr(1) ~ $word.substr(0,1) if $word !~~ /^<[aeiou]>/; + + $word ~= "m" ~ "a" x $add++; + + return $word; +} diff --git a/challenge-274/arne-sommer/raku/ch-2.raku b/challenge-274/arne-sommer/raku/ch-2.raku new file mode 100755 index 0000000000..10e7b013d7 --- /dev/null +++ b/challenge-274/arne-sommer/raku/ch-2.raku @@ -0,0 +1,80 @@ +#! /usr/bin/env raku + +unit sub MAIN (Str $routestr = "12 11 41 | 15 5 35", :v(:$verbose)); + +my @routes = $routestr.split("|")>>.words>>.Numeric; + +die "All the routes must have three integers each" unless all(@routes>>.elems) == 3; +die "Non-negative integers only" unless all(@routes[*;*]) ~~ UInt; + +my @departures; + +for @routes -> @route +{ + state $rid = 0; $rid++; + my $interval = @route[0]; + my $offset = @route[1]; + my $duration = @route[2]; + + say ": Route: $rid Interval: $interval Offset: $offset Duration: $duration" if $verbose; + + die "Route $rid: Interval does not comply with 60 min rule" unless 60 %% $interval; + die "Route $rid: Interval must be positive" unless $interval > 0; + + my $min = $offset; + + while $min < 60 + { + @departures.push: { dept => $min, route => $rid, arrival => $min + $duration }; + + $min += $interval; + } +} + +my @sorted = @departures.sort({ $^a <=> $^b || $^a <=> $^b || $^a <=> $^b }); + +if $verbose +{ + for @sorted -> %dep + { + say ": Departure at { %dep.fmt('%02d') }: route %dep arrive at %dep"; + } +} + +exit if $verbose && $verbose eq '2'; + +my @skip; + +for 0 .. 59 -> $min +{ + my @todo = @sorted.grep( * >= $min ); + + unless @todo.elems + { + if @skip && @skip[0] == 0 + { + @skip.push: $min; + say ": Min:$min (no more departures this hour, and we skipped the first one this hour) * skip" if $verbose; + } + elsif $verbose + { + say ": Min:$min (no more departures this hour, and we took the first one this hour) - first"; + } + next; + } + + my %first = @todo.shift; + my %wait_to = %first; + + for @todo -> %dept + { + %wait_to = %dept if %dept < %wait_to; + } + + my $ok = %first eqv %wait_to; + + @skip.push: $min if !$ok; + say ": Min:{ $min.fmt('%02d') }: { $min == %wait_to ?? "" !! "wait to %wait_to" } take route %wait_to and arrive at %wait_to { $ok ?? "- first" !! "* skip" }" if $verbose; +} + +say "[{ @skip.join(", ") }]"; diff --git a/challenge-274/arne-sommer/raku/goat-latin b/challenge-274/arne-sommer/raku/goat-latin new file mode 100755 index 0000000000..101b68ecc3 --- /dev/null +++ b/challenge-274/arne-sommer/raku/goat-latin @@ -0,0 +1,16 @@ +#! /usr/bin/env raku + +unit sub MAIN ($sentence where $sentence.chars > 0); + +say $sentence.words.map( *.&goatify-word ).join(" "); + +sub goatify-word ($word is copy) +{ + state $add = 2; + + $word = $word.substr(1) ~ $word.substr(0,1) if $word !~~ /^<[aeiou]>/; + + $word ~= "m" ~ "a" x $add++; + + return $word; +} -- cgit From 2d02116e61f83cc3bf305f989ef37a6b1f727166 Mon Sep 17 00:00:00 2001 From: arnesom Date: Sun, 23 Jun 2024 18:42:42 +0200 Subject: Arne Sommer --- challenge-005/arne-sommer/blog.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/challenge-005/arne-sommer/blog.txt b/challenge-005/arne-sommer/blog.txt index 0ca62becb1..41b8948747 100644 --- a/challenge-005/arne-sommer/blog.txt +++ b/challenge-005/arne-sommer/blog.txt @@ -1 +1 @@ -https://raku-musings.com/goat-bus.html +https://perl6.eu/anagrams.html -- cgit