aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCY Fung <fungcheokyin@gmail.com>2022-08-09 20:12:26 +0800
committerCY Fung <fungcheokyin@gmail.com>2022-08-09 20:12:26 +0800
commit08244df6a947a680f3954ea45ff3d39c7426a10e (patch)
tree61e0ae142073bcb3f69a670c7ef5ae0de7c1e6fa
parentf0f57d443957af6613f73417664b1c6fdf9c2f33 (diff)
downloadperlweeklychallenge-club-08244df6a947a680f3954ea45ff3d39c7426a10e.tar.gz
perlweeklychallenge-club-08244df6a947a680f3954ea45ff3d39c7426a10e.tar.bz2
perlweeklychallenge-club-08244df6a947a680f3954ea45ff3d39c7426a10e.zip
Week 177
-rw-r--r--challenge-177/cheok-yin-fung/perl/ch-1.pl40
-rw-r--r--challenge-177/cheok-yin-fung/perl/ch-2.pl27
-rw-r--r--challenge-177/cheok-yin-fung/raku/ch-1.raku41
-rw-r--r--challenge-177/cheok-yin-fung/raku/ch-2.raku26
4 files changed, 134 insertions, 0 deletions
diff --git a/challenge-177/cheok-yin-fung/perl/ch-1.pl b/challenge-177/cheok-yin-fung/perl/ch-1.pl
new file mode 100644
index 0000000000..e927d55b39
--- /dev/null
+++ b/challenge-177/cheok-yin-fung/perl/ch-1.pl
@@ -0,0 +1,40 @@
+# The Weekly Challenge 177
+# Task 1 Damm Algorithm
+use v5.30.0;
+
+say damm_check($ARGV[0] || 5724)? "valid": "invalid";
+
+
+sub damm_check {
+ my $num = $_[0];
+
+ my @operation_table = (
+ [0, 3, 1, 7, 5, 9, 8, 6, 4, 2],
+ [7, 0, 9, 2, 1, 5, 4, 8, 6, 3],
+ [4, 2, 0, 6, 8, 7, 1, 3, 5, 9],
+ [1, 7, 5, 0, 9, 8, 3, 4, 2, 6],
+ [6, 1, 2, 3, 0, 4, 5, 9, 7, 8],
+ [3, 6, 7, 4, 2, 0, 9, 5, 8, 1],
+ [5, 8, 6, 9, 7, 2, 0, 1, 3, 4],
+ [8, 9, 4, 5, 3, 6, 2, 0, 1, 7],
+ [9, 4, 3, 8, 6, 1, 7, 2, 0, 5],
+ [2, 5, 8, 1, 4, 3, 6, 7, 9, 0]
+ );
+
+ my $interim = 0;
+
+ my @digit = split "", $num;
+ my $i = 0;
+
+ while ($i < scalar @digit - 1) {
+ $interim = $operation_table[$interim][$digit[$i]];
+ $i++;
+ }
+
+ return $digit[$i] == $interim;
+}
+
+use Test::More tests => 2;
+
+ok (damm_check(5724));
+ok (!damm_check(5725));
diff --git a/challenge-177/cheok-yin-fung/perl/ch-2.pl b/challenge-177/cheok-yin-fung/perl/ch-2.pl
new file mode 100644
index 0000000000..19fc467d0e
--- /dev/null
+++ b/challenge-177/cheok-yin-fung/perl/ch-2.pl
@@ -0,0 +1,27 @@
+# The Weekly Challenge 177
+# Task 2 Palindromic Prime
+
+use v5.30.0;
+use warnings;
+
+sub is_prime {
+ my $n = $_[0];
+ my $k = 1;
+ while ($n % (6*$k-1) && $n % (6*$k+1) && (6*$k+1 <= sqrt $n)) {
+ $k++;
+ }
+ return $n % (6*$k-1) && $n % (6*$k+1);
+}
+
+my @arr;
+my $pali = 1;
+while (scalar @arr < 20) {
+ if ( (scalar reverse $pali) % 2 && $pali % 3 && $pali !~ /0/ ) {
+ my $n = $pali."0".(scalar reverse $pali);
+ if (is_prime($n)) {
+ say $n;
+ push @arr, $n;
+ }
+ }
+ $pali++;
+}
diff --git a/challenge-177/cheok-yin-fung/raku/ch-1.raku b/challenge-177/cheok-yin-fung/raku/ch-1.raku
new file mode 100644
index 0000000000..1cdf36cad3
--- /dev/null
+++ b/challenge-177/cheok-yin-fung/raku/ch-1.raku
@@ -0,0 +1,41 @@
+# The Weekly Challenge 177
+# Task 1 Damm Algorithm
+use v6;
+
+say damm_check(@*ARGS[0] || 5724)?? "valid"!! "invalid";
+
+
+sub damm_check ($num) {
+
+ my @operation_table =
+ [0, 3, 1, 7, 5, 9, 8, 6, 4, 2],
+ [7, 0, 9, 2, 1, 5, 4, 8, 6, 3],
+ [4, 2, 0, 6, 8, 7, 1, 3, 5, 9],
+ [1, 7, 5, 0, 9, 8, 3, 4, 2, 6],
+ [6, 1, 2, 3, 0, 4, 5, 9, 7, 8],
+ [3, 6, 7, 4, 2, 0, 9, 5, 8, 1],
+ [5, 8, 6, 9, 7, 2, 0, 1, 3, 4],
+ [8, 9, 4, 5, 3, 6, 2, 0, 1, 7],
+ [9, 4, 3, 8, 6, 1, 7, 2, 0, 5],
+ [2, 5, 8, 1, 4, 3, 6, 7, 9, 0];
+
+ my $interim = 0;
+
+ my @digit = $num.split("");
+
+ my $i = 0;
+
+ while $i < @digit.elems - 1 {
+ $interim = @operation_table[$interim][@digit[$i]];
+ $i++;
+ }
+
+ return @digit[$i] == $interim;
+}
+
+
+use Test;
+is( damm_check(5724), True);
+is( damm_check(5725), False);
+plan 2;
+done-testing;
diff --git a/challenge-177/cheok-yin-fung/raku/ch-2.raku b/challenge-177/cheok-yin-fung/raku/ch-2.raku
new file mode 100644
index 0000000000..c30f2a6c52
--- /dev/null
+++ b/challenge-177/cheok-yin-fung/raku/ch-2.raku
@@ -0,0 +1,26 @@
+# The Weekly Challenge 177
+# Task 2 Palindromic Prime Cyclops
+# Performance: real 0m0.294s user 0m0.441s sys 0m0.032s
+use v6;
+
+sub is-prime ($num) {
+ my $k = 1;
+ while ($num !%% (6*$k-1) && $num !%% (6*$k+1) && (6*$k+1 <= sqrt($num))) {
+ $k++;
+ }
+ return $num !%% (6*$k-1) && $num !%% (6*$k+1);
+}
+
+my @arr;
+my $pali = 1;
+
+while (@arr.elems < 20) {
+ if (flip $pali) !%% 2 && $pali !%% 3 && $pali !~~ /0/ {
+ my $num = $pali~"0"~flip $pali;
+ if is-prime($num) {
+ say $num;
+ push @arr, $num;
+ }
+ }
+ $pali++;
+}