aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2021-05-24 14:07:41 +0100
committerGitHub <noreply@github.com>2021-05-24 14:07:41 +0100
commit52eb2b404b9907f85b82f451970b0953b7376b15 (patch)
tree09bbd1e6d88c72bb8cf0cb66af41f238cbf06bd5
parenta5159d5a585f6d493a1318a3cf35b3675f6af304 (diff)
parentee2eec4faa65d5dea48e85e0ae477725e30fecea (diff)
downloadperlweeklychallenge-club-52eb2b404b9907f85b82f451970b0953b7376b15.tar.gz
perlweeklychallenge-club-52eb2b404b9907f85b82f451970b0953b7376b15.tar.bz2
perlweeklychallenge-club-52eb2b404b9907f85b82f451970b0953b7376b15.zip
Merge pull request #4135 from andemark/branch-for-challenge-114
Branch for challenge 114
-rw-r--r--challenge-114/mark-anderson/raku/ch-1.raku46
1 files changed, 46 insertions, 0 deletions
diff --git a/challenge-114/mark-anderson/raku/ch-1.raku b/challenge-114/mark-anderson/raku/ch-1.raku
new file mode 100644
index 0000000000..caecfd4270
--- /dev/null
+++ b/challenge-114/mark-anderson/raku/ch-1.raku
@@ -0,0 +1,46 @@
+#!/usr/bin/env raku
+
+use Test;
+plan 9;
+
+is next-palindrome-number(3), 4;
+is next-palindrome-number(9), 11;
+is next-palindrome-number(999), 1001;
+is next-palindrome-number(1234), 1331;
+is next-palindrome-number(1999), 2002;
+is next-palindrome-number(4321), 4334;
+is next-palindrome-number(4444), 4554;
+is next-palindrome-number(500006), 501105;
+is next-palindrome-number(90000056780000000000000), 90000056780008765000009;
+
+multi next-palindrome-number($N where * == 9) { 11 }
+
+multi next-palindrome-number($N)
+{
+ my ($left, $middle) = partition($N);
+ my $next = $left ~ $middle ~ $left.flip;
+
+ while $next <= $N
+ {
+ $next = ($left ~ $middle) + 1;
+ $next ~= $next.substr(^$left.chars).flip;
+ }
+
+ $next;
+}
+
+sub partition($N)
+{
+ my @N = $N.comb;
+ my $mid = @N.elems div 2;
+ my @left = @N[^$mid];
+ my $middle = q{};
+ my @right = @N[$mid..*];
+
+ unless @left.end == @right.end
+ {
+ $middle = @right.shift;
+ }
+
+ @left.join, $middle;
+}