From f784bb5ee8f95134c6dbd9a85511c5f272fdfccb Mon Sep 17 00:00:00 2001 From: arnesom Date: Sat, 7 Sep 2024 20:57:43 +0200 Subject: Arne Sommer --- challenge-285/arne-sommer/blog.txt | 1 + challenge-285/arne-sommer/raku/ch-1.raku | 25 +++++++++ challenge-285/arne-sommer/raku/ch-2.raku | 68 +++++++++++++++++++++++ challenge-285/arne-sommer/raku/making-change | 55 ++++++++++++++++++ challenge-285/arne-sommer/raku/making-change-last | 68 +++++++++++++++++++++++ challenge-285/arne-sommer/raku/no-connection | 25 +++++++++ 6 files changed, 242 insertions(+) create mode 100644 challenge-285/arne-sommer/blog.txt create mode 100755 challenge-285/arne-sommer/raku/ch-1.raku create mode 100755 challenge-285/arne-sommer/raku/ch-2.raku create mode 100755 challenge-285/arne-sommer/raku/making-change create mode 100755 challenge-285/arne-sommer/raku/making-change-last create mode 100755 challenge-285/arne-sommer/raku/no-connection diff --git a/challenge-285/arne-sommer/blog.txt b/challenge-285/arne-sommer/blog.txt new file mode 100644 index 0000000000..563ffcf0db --- /dev/null +++ b/challenge-285/arne-sommer/blog.txt @@ -0,0 +1 @@ +https://raku-musings.com/no-connection.html diff --git a/challenge-285/arne-sommer/raku/ch-1.raku b/challenge-285/arne-sommer/raku/ch-1.raku new file mode 100755 index 0000000000..d55e3a25d0 --- /dev/null +++ b/challenge-285/arne-sommer/raku/ch-1.raku @@ -0,0 +1,25 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@routes where @routes.elems > 0, :v(:$verbose)); + +my %outgoing; + +for @routes -> $route +{ + my ($from, $to) = $route.split(/\s+/); + + say ": Route from '$from' to '$to'" if $verbose; + + %outgoing{$from}++; + %outgoing{$to} = 0 unless defined %outgoing{$to}; +} + +if $verbose +{ + for sort keys %outgoing -> $key + { + say ": '$key' has %outgoing{$key} outgoing connectiuon(s)" if $verbose; + } +} + +say %outgoing.grep( *.value == 0 )>>.key.join(", "); diff --git a/challenge-285/arne-sommer/raku/ch-2.raku b/challenge-285/arne-sommer/raku/ch-2.raku new file mode 100755 index 0000000000..d99bfd95c5 --- /dev/null +++ b/challenge-285/arne-sommer/raku/ch-2.raku @@ -0,0 +1,68 @@ +#! /usr/bin/env raku + +unit sub MAIN (UInt $amount, :v(:$verbose)); + +my %value; + +%value = 1; +%value = 5; +%value = 10; +%value = 25; +%value = 50; + +my $ok = 0; + +for 0 .. $amount -> $penny +{ + my $sum-p = $penny * %value; + + for 0 .. $amount -> $nickel + { + my $sum-pn = $sum-p + $nickel * %value; + + last if $sum-pn > $amount; + + for 0 .. $amount -> $dime + { + my $sum-pnd = $sum-pn + $dime * %value; + + last if $sum-pnd > $amount; + + for 0 .. $amount -> $quarter + { + my $sum-pndq = $sum-pnd + $quarter * %value; + + last if $sum-pndq > $amount; + + for 0 .. $amount -> $half-dollar + { + my $sum = $sum-pndq + $half-dollar * %value; + + last if $sum > $amount; + + if $sum == $amount + { + $ok++; + say ": " ~ + ( + prettyish($penny, 'P'), + prettyish($nickel, 'N'), + prettyish($dime, 'D'), + prettyish($quarter, 'Q'), + prettyish($half-dollar, 'HD') + ).grep( *.defined ).join(" + ") if $verbose; + } + } + } + } + } +} + +sub prettyish ($value, $letter) +{ + return unless $value; + return $letter if $value == 1; + return "$value$letter"; +} + +say $ok; diff --git a/challenge-285/arne-sommer/raku/making-change b/challenge-285/arne-sommer/raku/making-change new file mode 100755 index 0000000000..927ba48fdb --- /dev/null +++ b/challenge-285/arne-sommer/raku/making-change @@ -0,0 +1,55 @@ +#! /usr/bin/env raku + +unit sub MAIN (UInt $amount, :v(:$verbose)); + +my %value; + +%value = 1; +%value = 5; +%value = 10; +%value = 25; +%value = 50; + +my $ok = 0; + +for 0 .. $amount -> $penny +{ + for 0 .. $amount div %value -> $nickel + { + for 0 .. $amount div %value -> $dime + { + for 0 .. $amount div %value -> $quarter + { + for 0 .. $amount div %value -> $half-dollar + { + if $amount == + $penny + + $nickel * %value + + $dime * %value + + $quarter * %value + + $half-dollar * %value + { + $ok++; + say ": " ~ + ( + prettyish($penny, 'P'), + prettyish($nickel, 'N'), + prettyish($dime, 'D'), + prettyish($quarter, 'Q'), + prettyish($half-dollar, 'HD') + ).grep( *.defined ).join(" + ") if $verbose; + } + } + } + } + } +} + +sub prettyish ($value, $letter) +{ + return unless $value; + return $letter if $value == 1; + return "$value$letter"; +} + +say $ok; diff --git a/challenge-285/arne-sommer/raku/making-change-last b/challenge-285/arne-sommer/raku/making-change-last new file mode 100755 index 0000000000..d99bfd95c5 --- /dev/null +++ b/challenge-285/arne-sommer/raku/making-change-last @@ -0,0 +1,68 @@ +#! /usr/bin/env raku + +unit sub MAIN (UInt $amount, :v(:$verbose)); + +my %value; + +%value = 1; +%value = 5; +%value = 10; +%value = 25; +%value = 50; + +my $ok = 0; + +for 0 .. $amount -> $penny +{ + my $sum-p = $penny * %value; + + for 0 .. $amount -> $nickel + { + my $sum-pn = $sum-p + $nickel * %value; + + last if $sum-pn > $amount; + + for 0 .. $amount -> $dime + { + my $sum-pnd = $sum-pn + $dime * %value; + + last if $sum-pnd > $amount; + + for 0 .. $amount -> $quarter + { + my $sum-pndq = $sum-pnd + $quarter * %value; + + last if $sum-pndq > $amount; + + for 0 .. $amount -> $half-dollar + { + my $sum = $sum-pndq + $half-dollar * %value; + + last if $sum > $amount; + + if $sum == $amount + { + $ok++; + say ": " ~ + ( + prettyish($penny, 'P'), + prettyish($nickel, 'N'), + prettyish($dime, 'D'), + prettyish($quarter, 'Q'), + prettyish($half-dollar, 'HD') + ).grep( *.defined ).join(" + ") if $verbose; + } + } + } + } + } +} + +sub prettyish ($value, $letter) +{ + return unless $value; + return $letter if $value == 1; + return "$value$letter"; +} + +say $ok; diff --git a/challenge-285/arne-sommer/raku/no-connection b/challenge-285/arne-sommer/raku/no-connection new file mode 100755 index 0000000000..d55e3a25d0 --- /dev/null +++ b/challenge-285/arne-sommer/raku/no-connection @@ -0,0 +1,25 @@ +#! /usr/bin/env raku + +unit sub MAIN (*@routes where @routes.elems > 0, :v(:$verbose)); + +my %outgoing; + +for @routes -> $route +{ + my ($from, $to) = $route.split(/\s+/); + + say ": Route from '$from' to '$to'" if $verbose; + + %outgoing{$from}++; + %outgoing{$to} = 0 unless defined %outgoing{$to}; +} + +if $verbose +{ + for sort keys %outgoing -> $key + { + say ": '$key' has %outgoing{$key} outgoing connectiuon(s)" if $verbose; + } +} + +say %outgoing.grep( *.value == 0 )>>.key.join(", "); -- cgit