aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBarrOff <58253563+BarrOff@users.noreply.github.com>2024-09-29 23:16:02 +0200
committerBarrOff <58253563+BarrOff@users.noreply.github.com>2024-09-29 23:16:02 +0200
commit7b3cd5bfc61dbf5d2b038bc2dae9c932a81ffbec (patch)
tree42e6bc1f7146557e9ddf835f54cc6c372bf07789
parent1d33e6293b7f2829eb3815cecc2112812dbc69b6 (diff)
downloadperlweeklychallenge-club-7b3cd5bfc61dbf5d2b038bc2dae9c932a81ffbec.tar.gz
perlweeklychallenge-club-7b3cd5bfc61dbf5d2b038bc2dae9c932a81ffbec.tar.bz2
perlweeklychallenge-club-7b3cd5bfc61dbf5d2b038bc2dae9c932a81ffbec.zip
feat: add solution for challenge 288 from BarrOff
-rw-r--r--challenge-288/barroff/raku/ch-1.p640
1 files changed, 40 insertions, 0 deletions
diff --git a/challenge-288/barroff/raku/ch-1.p6 b/challenge-288/barroff/raku/ch-1.p6
new file mode 100644
index 0000000000..9c7c0bc51c
--- /dev/null
+++ b/challenge-288/barroff/raku/ch-1.p6
@@ -0,0 +1,40 @@
+#!/usr/bin/env raku
+
+use v6.d;
+
+sub is-palindrome($word --> Bool) {
+ $word eq $word.flip;
+}
+
+sub find-palindrome($str, &mod) {
+ my $mod-str = &mod($str);
+ return $mod-str if is-palindrome($mod-str);
+ return find-palindrome($mod-str, &mod);
+}
+
+sub closest-palindrome(Str $str --> Str) {
+ my &dec-one = -> $x { $x - 1 };
+ my &inc-one = -> $x { $x + 1 };
+ my $lower-palindrome = find-palindrome($str, &dec-one);
+ my $upper-palindrome = find-palindrome($str, &inc-one);
+
+ $str - $lower-palindrome <= $upper-palindrome - $str
+ ?? Str($lower-palindrome)
+ !! Str($upper-palindrome);
+}
+
+#| Run test cases
+multi sub MAIN('test') {
+ use Test;
+ plan 4;
+
+ is closest-palindrome("123"), "121", 'works for "123"';
+ is closest-palindrome("2"), "1", 'works for "2"';
+ is closest-palindrome("1400"), "1441", 'works for "1400"';
+ is closest-palindrome("1001"), "999", 'works for "1001"';
+}
+
+#| Take user provided string like "1400"
+multi sub MAIN(Str $str) {
+ say closest-palindrome($str);
+}