aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2022-08-01 00:45:48 +0100
committerGitHub <noreply@github.com>2022-08-01 00:45:48 +0100
commit0eb97b0b906375c870ae1b84d59f348ac686beae (patch)
tree8aa22fc43ab2a048d6827087eb317bb35bc44612
parent322c013280df8ac073058f96599f97778b172df6 (diff)
parent93ddd30b5af89e6831e30a9a7cdb92f3a09e3d62 (diff)
downloadperlweeklychallenge-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.txt1
-rwxr-xr-xchallenge-175/arne-sommer/raku/ch-1.raku12
-rwxr-xr-xchallenge-175/arne-sommer/raku/ch-2.raku36
-rwxr-xr-xchallenge-175/arne-sommer/raku/last-sunday12
-rwxr-xr-xchallenge-175/arne-sommer/raku/last-sunday-oneliner12
-rwxr-xr-xchallenge-175/arne-sommer/raku/ptm36
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;
+}
+