diff options
| author | CY Fung <fungcheokyin@gmail.com> | 2022-08-09 20:12:26 +0800 |
|---|---|---|
| committer | CY Fung <fungcheokyin@gmail.com> | 2022-08-09 20:12:26 +0800 |
| commit | 08244df6a947a680f3954ea45ff3d39c7426a10e (patch) | |
| tree | 61e0ae142073bcb3f69a670c7ef5ae0de7c1e6fa | |
| parent | f0f57d443957af6613f73417664b1c6fdf9c2f33 (diff) | |
| download | perlweeklychallenge-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.pl | 40 | ||||
| -rw-r--r-- | challenge-177/cheok-yin-fung/perl/ch-2.pl | 27 | ||||
| -rw-r--r-- | challenge-177/cheok-yin-fung/raku/ch-1.raku | 41 | ||||
| -rw-r--r-- | challenge-177/cheok-yin-fung/raku/ch-2.raku | 26 |
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++; +} |
