aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2022-08-28 17:38:25 +0100
committerGitHub <noreply@github.com>2022-08-28 17:38:25 +0100
commitfca06608d83631f1d8828a3010ebbc1e1c08f67d (patch)
tree438d5938b451bf016981a33233d5efbe97b32a26
parent52c9310ea1708dabde3c479624fa976b6abb7913 (diff)
parent83a865161a5b298e85b2145b41e6ca14558af214 (diff)
downloadperlweeklychallenge-club-fca06608d83631f1d8828a3010ebbc1e1c08f67d.tar.gz
perlweeklychallenge-club-fca06608d83631f1d8828a3010ebbc1e1c08f67d.tar.bz2
perlweeklychallenge-club-fca06608d83631f1d8828a3010ebbc1e1c08f67d.zip
Merge pull request #6657 from andemark/branch-for-challenge-179
Decided to go with the module
-rw-r--r--challenge-179/mark-anderson/raku/ch-1.raku69
1 files changed, 4 insertions, 65 deletions
diff --git a/challenge-179/mark-anderson/raku/ch-1.raku b/challenge-179/mark-anderson/raku/ch-1.raku
index 9f25e464ac..947de6ad1c 100644
--- a/challenge-179/mark-anderson/raku/ch-1.raku
+++ b/challenge-179/mark-anderson/raku/ch-1.raku
@@ -1,68 +1,7 @@
#!/usr/bin/env raku
+use Lingua::EN::Numbers;
use Test;
-is ordinal(11), 'eleventh';
-is ordinal(62), 'sixty-second';
-is ordinal(99), 'ninety-ninth';
-is ordinal(100), 'one-hundredth';
-is ordinal(4320), 'four thousand, three-hundred-twentieth';
-is ordinal(11009029), 'eleven million, nine thousand, twenty-ninth';
-
-multi ordinal($n where * ~~ UInt)
-{
- ordinal(number2string($n))
-}
-
-multi ordinal($s)
-{
- my $ord;
-
- my %h = :one('first'), :two('second'), :three('third'), :five('fifth'),
- :eight('eighth'), :nine('ninth'), :twelve('twelfth');
-
- my $m = $s ~~ / <[a..z]>+ $ /;
-
- given $m
- {
- when %h{$_}:exists { $ord = %h{$m} }
- when .ends-with('y') { $ord = $m.subst(/ y $ /, 'ieth') }
- default { $ord = $m ~ 'th' }
- }
-
- $s.subst(/ $m $ /, $ord);
-}
-
-sub number2string($num)
-{
- my @n = $num.polymod(1000 xx *);
-
- my @lt-twenty = < one two three four five six seven eight nine ten eleven twelve
- thirteen fourteen fifteen sixteen seventeen eighteen nineteen > andthen .unshift: '';
-
- my @tens = < twenty thirty forty fifty sixty seventy eighty ninety > andthen .prepend: '', '';
-
- my @magnitude = < thousand million billion trillion quadrillion quintillion > andthen .unshift: '';
-
- return .reverse.join(', ') given gather for @n.kv -> $k, $v
- {
- given $v.chars
- {
- when 1 { take (@lt-twenty[$v] ~ ' ' ~ @magnitude[$k]).trim-trailing if $v }
- when 2 { take (lt-hundred($v) ~ ' ' ~ @magnitude[$k]).trim-trailing }
- default
- {
- my $h = @lt-twenty[$v.substr(0,1)] ~ '-hundred';
- my $t = lt-hundred($v.substr(1,2));
- take (not $t) ?? $h !! ($h ~ '-' ~ $t ~ ' ' ~ @magnitude[$k]).trim-trailing;
- }
- }
- }
-
- sub lt-hundred($n)
- {
- return @lt-twenty[$n] if $n < 20;
- my @d = $n.comb;
- return @tens[@d[0]] unless +@d[1];
- return @tens[@d[0]] ~ '-' ~ @lt-twenty[@d[1]]
- }
-}
+is ordinal(11), 'eleventh';
+is ordinal(62), 'sixty-second';
+is ordinal(99), 'ninety-ninth';