diff options
| author | Mohammad Sajid Anwar <Mohammad.Anwar@yahoo.com> | 2024-09-07 20:16:05 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-09-07 20:16:05 +0100 |
| commit | cd83f19adb034cfbabd60dddbe3c55b10f6c30d8 (patch) | |
| tree | 77a5ac3be4fa177c5eaa32b8de806b854b41f2fb | |
| parent | 2307bd24b68d96ba4ef3b2d541860c841d43804c (diff) | |
| parent | f784bb5ee8f95134c6dbd9a85511c5f272fdfccb (diff) | |
| download | perlweeklychallenge-club-cd83f19adb034cfbabd60dddbe3c55b10f6c30d8.tar.gz perlweeklychallenge-club-cd83f19adb034cfbabd60dddbe3c55b10f6c30d8.tar.bz2 perlweeklychallenge-club-cd83f19adb034cfbabd60dddbe3c55b10f6c30d8.zip | |
Merge pull request #10786 from arnesom/branch-for-challenge-285
Arne Sommer
| -rw-r--r-- | challenge-285/arne-sommer/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-285/arne-sommer/raku/ch-1.raku | 25 | ||||
| -rwxr-xr-x | challenge-285/arne-sommer/raku/ch-2.raku | 68 | ||||
| -rwxr-xr-x | challenge-285/arne-sommer/raku/making-change | 55 | ||||
| -rwxr-xr-x | challenge-285/arne-sommer/raku/making-change-last | 68 | ||||
| -rwxr-xr-x | challenge-285/arne-sommer/raku/no-connection | 25 |
6 files changed, 242 insertions, 0 deletions
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<penny> = 1; +%value<nickel> = 5; +%value<dime> = 10; +%value<quarter> = 25; +%value<half-dollar> = 50; + +my $ok = 0; + +for 0 .. $amount -> $penny +{ + my $sum-p = $penny * %value<penny>; + + for 0 .. $amount -> $nickel + { + my $sum-pn = $sum-p + $nickel * %value<nickel>; + + last if $sum-pn > $amount; + + for 0 .. $amount -> $dime + { + my $sum-pnd = $sum-pn + $dime * %value<dime>; + + last if $sum-pnd > $amount; + + for 0 .. $amount -> $quarter + { + my $sum-pndq = $sum-pnd + $quarter * %value<quarter>; + + last if $sum-pndq > $amount; + + for 0 .. $amount -> $half-dollar + { + my $sum = $sum-pndq + $half-dollar * %value<half-dollar>; + + 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<penny> = 1; +%value<nickel> = 5; +%value<dime> = 10; +%value<quarter> = 25; +%value<half-dollar> = 50; + +my $ok = 0; + +for 0 .. $amount -> $penny +{ + for 0 .. $amount div %value<nickel> -> $nickel + { + for 0 .. $amount div %value<dime> -> $dime + { + for 0 .. $amount div %value<quarter> -> $quarter + { + for 0 .. $amount div %value<half-dollar> -> $half-dollar + { + if $amount == + $penny + + $nickel * %value<nickel> + + $dime * %value<dime> + + $quarter * %value<quarter> + + $half-dollar * %value<half-dollar> + { + $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<penny> = 1; +%value<nickel> = 5; +%value<dime> = 10; +%value<quarter> = 25; +%value<half-dollar> = 50; + +my $ok = 0; + +for 0 .. $amount -> $penny +{ + my $sum-p = $penny * %value<penny>; + + for 0 .. $amount -> $nickel + { + my $sum-pn = $sum-p + $nickel * %value<nickel>; + + last if $sum-pn > $amount; + + for 0 .. $amount -> $dime + { + my $sum-pnd = $sum-pn + $dime * %value<dime>; + + last if $sum-pnd > $amount; + + for 0 .. $amount -> $quarter + { + my $sum-pndq = $sum-pnd + $quarter * %value<quarter>; + + last if $sum-pndq > $amount; + + for 0 .. $amount -> $half-dollar + { + my $sum = $sum-pndq + $half-dollar * %value<half-dollar>; + + 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(", "); |
