diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2022-08-01 00:45:48 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-08-01 00:45:48 +0100 |
| commit | 0eb97b0b906375c870ae1b84d59f348ac686beae (patch) | |
| tree | 8aa22fc43ab2a048d6827087eb317bb35bc44612 | |
| parent | 322c013280df8ac073058f96599f97778b172df6 (diff) | |
| parent | 93ddd30b5af89e6831e30a9a7cdb92f3a09e3d62 (diff) | |
| download | perlweeklychallenge-club-0eb97b0b906375c870ae1b84d59f348ac686beae.tar.gz perlweeklychallenge-club-0eb97b0b906375c870ae1b84d59f348ac686beae.tar.bz2 perlweeklychallenge-club-0eb97b0b906375c870ae1b84d59f348ac686beae.zip | |
Merge pull request #6533 from arnesom/branch-for-challenge-175
Arne Sommer
| -rw-r--r-- | challenge-175/arne-sommer/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-175/arne-sommer/raku/ch-1.raku | 12 | ||||
| -rwxr-xr-x | challenge-175/arne-sommer/raku/ch-2.raku | 36 | ||||
| -rwxr-xr-x | challenge-175/arne-sommer/raku/last-sunday | 12 | ||||
| -rwxr-xr-x | challenge-175/arne-sommer/raku/last-sunday-oneliner | 12 | ||||
| -rwxr-xr-x | challenge-175/arne-sommer/raku/ptm | 36 |
6 files changed, 109 insertions, 0 deletions
diff --git a/challenge-175/arne-sommer/blog.txt b/challenge-175/arne-sommer/blog.txt new file mode 100644 index 0000000000..377d59fa68 --- /dev/null +++ b/challenge-175/arne-sommer/blog.txt @@ -0,0 +1 @@ +https://raku-musings.com/perfect-at-last.html diff --git a/challenge-175/arne-sommer/raku/ch-1.raku b/challenge-175/arne-sommer/raku/ch-1.raku new file mode 100755 index 0000000000..20a2813fee --- /dev/null +++ b/challenge-175/arne-sommer/raku/ch-1.raku @@ -0,0 +1,12 @@ +#! /usr/bin/env raku + +unit sub MAIN (Int $year = Date.today.year); + +for 1 .. 12 -> $month +{ + my $date = Date.new($year, $month, Date.new($year, $month, 1).days-in-month); + + $date.=pred while $date.day-of-week != 7; + + say $date; +} diff --git a/challenge-175/arne-sommer/raku/ch-2.raku b/challenge-175/arne-sommer/raku/ch-2.raku new file mode 100755 index 0000000000..4a34211631 --- /dev/null +++ b/challenge-175/arne-sommer/raku/ch-2.raku @@ -0,0 +1,36 @@ +#! /usr/bin/env raku + +unit sub MAIN (Int $count where $count > 0 = 20, :v(:$verbose)); + +my $ptm := (1 .. Inf).grep( *.&is-ptm ); + +say $ptm[^$count].join(", "); + +sub is-ptm ($number) +{ + my @totients; + my $c = $number; + + while $c > 1 + { + $c = totient($c); + @totients.push: $c; + } + +say ":: $number [@totients[]] sum:{ @totients.sum } { $number == @totients.sum ?? "match" !! "" }" if $verbose; + + return @totients.sum == $number; +} + +sub totient ($number) +{ + my $count = 0; + + for 1 .. $number -1 -> $candidate + { + $count++ if $number gcd $candidate == 1; + } + + return $count; +} + diff --git a/challenge-175/arne-sommer/raku/last-sunday b/challenge-175/arne-sommer/raku/last-sunday new file mode 100755 index 0000000000..20a2813fee --- /dev/null +++ b/challenge-175/arne-sommer/raku/last-sunday @@ -0,0 +1,12 @@ +#! /usr/bin/env raku + +unit sub MAIN (Int $year = Date.today.year); + +for 1 .. 12 -> $month +{ + my $date = Date.new($year, $month, Date.new($year, $month, 1).days-in-month); + + $date.=pred while $date.day-of-week != 7; + + say $date; +} diff --git a/challenge-175/arne-sommer/raku/last-sunday-oneliner b/challenge-175/arne-sommer/raku/last-sunday-oneliner new file mode 100755 index 0000000000..5f1443ea22 --- /dev/null +++ b/challenge-175/arne-sommer/raku/last-sunday-oneliner @@ -0,0 +1,12 @@ +#! /usr/bin/env raku + +-> $year +{ + -> $month + { + -> $date + { + say $date.earlier(days => $date.day-of-week == 7 ?? ( 0 ) !! ( $date.day-of-week ) ) + }(Date.new($year, $month, Date.new($year, $month, 1).days-in-month)) + }($_) for 1 .. 12 +}(@*ARGS[0] // Date.today.year); diff --git a/challenge-175/arne-sommer/raku/ptm b/challenge-175/arne-sommer/raku/ptm new file mode 100755 index 0000000000..4a34211631 --- /dev/null +++ b/challenge-175/arne-sommer/raku/ptm @@ -0,0 +1,36 @@ +#! /usr/bin/env raku + +unit sub MAIN (Int $count where $count > 0 = 20, :v(:$verbose)); + +my $ptm := (1 .. Inf).grep( *.&is-ptm ); + +say $ptm[^$count].join(", "); + +sub is-ptm ($number) +{ + my @totients; + my $c = $number; + + while $c > 1 + { + $c = totient($c); + @totients.push: $c; + } + +say ":: $number [@totients[]] sum:{ @totients.sum } { $number == @totients.sum ?? "match" !! "" }" if $verbose; + + return @totients.sum == $number; +} + +sub totient ($number) +{ + my $count = 0; + + for 1 .. $number -1 -> $candidate + { + $count++ if $number gcd $candidate == 1; + } + + return $count; +} + |
