aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorE7-87-83 <fungcheokyin@gmail.com>2022-01-26 23:20:11 +0800
committerE7-87-83 <fungcheokyin@gmail.com>2022-01-26 23:20:11 +0800
commit4a60f293b696b8da32539511b1ee45caf3fa6110 (patch)
treec10c888d6d8de6ab3c585fba04dbfc0a64c8b26f
parente88e2fd6d5f3ee6595319a8f2fc1e7f475fb622d (diff)
downloadperlweeklychallenge-club-4a60f293b696b8da32539511b1ee45caf3fa6110.tar.gz
perlweeklychallenge-club-4a60f293b696b8da32539511b1ee45caf3fa6110.tar.bz2
perlweeklychallenge-club-4a60f293b696b8da32539511b1ee45caf3fa6110.zip
Wk 149 Task 2
-rw-r--r--challenge-149/cheok-yin-fung/blog.txt1
-rw-r--r--challenge-149/cheok-yin-fung/perl/ch-2.pl42
2 files changed, 43 insertions, 0 deletions
diff --git a/challenge-149/cheok-yin-fung/blog.txt b/challenge-149/cheok-yin-fung/blog.txt
new file mode 100644
index 0000000000..49bab24a65
--- /dev/null
+++ b/challenge-149/cheok-yin-fung/blog.txt
@@ -0,0 +1 @@
+https://E7-87-83.github.io/coding/challenge_149.html
diff --git a/challenge-149/cheok-yin-fung/perl/ch-2.pl b/challenge-149/cheok-yin-fung/perl/ch-2.pl
new file mode 100644
index 0000000000..5abce58fc2
--- /dev/null
+++ b/challenge-149/cheok-yin-fung/perl/ch-2.pl
@@ -0,0 +1,42 @@
+# The Weekly Challenge 149
+# Task 2 Largest Square
+
+use v5.22.0;
+use warnings;
+use Math::BigInt;
+use List::Util qw/uniq/;
+use Test::More tests => 5;
+
+my $_N = $ARGV[0] || 3;
+
+find_sq($_N);
+
+sub find_sq {
+
+ my $N = $_[0];
+
+ my $upper_sqrt = Math::BigInt->new($N)->bpow( int(($N+1)/2));
+ my $sq = Math::BigInt->new($upper_sqrt)->bpow(2);
+
+ my $bool = undef;
+
+ do {
+ $upper_sqrt->bdec();
+ $sq->bsub($upper_sqrt)->bsub($upper_sqrt)->bdec();
+ my $sq_baseN = $sq->to_base($N);
+ my @arr = split "", $sq_baseN;
+ my $uniq_num = uniq @arr;
+ $bool = 1 if scalar @arr == $uniq_num;
+ } while (!$bool);
+
+ say "in decimal base: ", $sq;
+ say "in base-N: ", $sq->to_base($N);
+
+ return $sq;
+}
+
+ok find_sq(2) == 1, "N = 2";
+ok find_sq(3) == 1, "N = 3";
+ok find_sq(7) == 751689, "N = 7";
+ok find_sq(8) == 10323369, "N = 8";
+ok find_sq(12) == 8706730814089, "N = 12";