aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-175/cheok-yin-fung/raku/ch-1.raku46
-rw-r--r--challenge-175/cheok-yin-fung/raku/ch-2.raku39
2 files changed, 85 insertions, 0 deletions
diff --git a/challenge-175/cheok-yin-fung/raku/ch-1.raku b/challenge-175/cheok-yin-fung/raku/ch-1.raku
new file mode 100644
index 0000000000..f73acba086
--- /dev/null
+++ b/challenge-175/cheok-yin-fung/raku/ch-1.raku
@@ -0,0 +1,46 @@
+# The Weekly Challenge 175
+# Task 1 Last Sunday
+use v6;
+use Test;
+
+
+sub lastsun ($s) {
+ return $s.earlier(days => $s.day-of-week == 0 ?? 7 !! $s.day-of-week );
+}
+
+
+
+sub last_sun_year ($year) {
+ my @ans;
+ for (2..12) {
+ my $m = $_ < 10 ?? '0'~"$_" !! $_;
+ my $s = Date.new("2022-$m-01");
+ my $n = lastsun $s;
+ @ans.push($n);
+ }
+ my $ny = Date.new("{$year+1}-01-01");
+ my $n = $ny.earlier(days => $ny.day-of-week);
+ @ans.push($n);
+ return @ans;
+}
+
+
+
+is( last_sun_year(2022),
+ ["2022-01-30",
+ "2022-02-27",
+ "2022-03-27",
+ "2022-04-24",
+ "2022-05-29",
+ "2022-06-26",
+ "2022-07-31",
+ "2022-08-28",
+ "2022-09-25",
+ "2022-10-30",
+ "2022-11-27",
+ "2022-12-25"]
+);
+
+plan 1;
+
+done-testing;
diff --git a/challenge-175/cheok-yin-fung/raku/ch-2.raku b/challenge-175/cheok-yin-fung/raku/ch-2.raku
new file mode 100644
index 0000000000..50ff1cd650
--- /dev/null
+++ b/challenge-175/cheok-yin-fung/raku/ch-2.raku
@@ -0,0 +1,39 @@
+# The Weekly Challenge 175
+# Task 2 Perfect Totient Number
+# (benchmark: real 0m36.228s user 0m34.853s sys 0m1.584s)
+use v6;
+use Prime::Factor;
+
+
+sub totient ($n) {
+ my $x = 1;
+ my @s = prime-factors($n).unique;
+ for (2..$n-1) {
+ $x++;
+ for (@s) -> $i {
+ if ($_ % $i == 0) {
+ $x--;
+ last;
+ }
+ }
+ }
+ return $x;
+}
+
+
+
+my $p = 0;
+loop (my $n0 = 3; $n0 < 1_000_000_000; $n0 += 2 ) {
+ my $n = $n0;
+ my $sum = 0;
+ repeat {
+ $n = totient($n);
+ $sum += $n;
+ } until ($sum > $n0 || $n == 1);
+ if ($sum == $n0) {
+ say $n0;
+ $p++;
+ }
+ last if $p >= 20;
+}
+