aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjuliodcs <julio.dcs@gmail.com>2020-12-20 17:08:26 +0100
committerjuliodcs <julio.dcs@gmail.com>2020-12-20 17:08:26 +0100
commit577b43f5655616bbb785dc6b96eccc1547075178 (patch)
treeb3139a20600170981c6da3b752332bd57f7c8d42
parent2c8320e7653a2fb8335078b07e8e7925f540073b (diff)
downloadperlweeklychallenge-club-577b43f5655616bbb785dc6b96eccc1547075178.tar.gz
perlweeklychallenge-club-577b43f5655616bbb785dc6b96eccc1547075178.tar.bz2
perlweeklychallenge-club-577b43f5655616bbb785dc6b96eccc1547075178.zip
juliodcs-week91
-rw-r--r--challenge-091/juliodcs/perl/ch-1.pl6
-rw-r--r--challenge-091/juliodcs/perl/ch-2.pl15
-rw-r--r--challenge-091/juliodcs/raku/ch-1.raku39
-rw-r--r--challenge-091/juliodcs/raku/ch-2.raku10
4 files changed, 70 insertions, 0 deletions
diff --git a/challenge-091/juliodcs/perl/ch-1.pl b/challenge-091/juliodcs/perl/ch-1.pl
new file mode 100644
index 0000000000..3219e9c7cc
--- /dev/null
+++ b/challenge-091/juliodcs/perl/ch-1.pl
@@ -0,0 +1,6 @@
+use strict;
+use warnings;
+use Lingua::EN::Numbers 'num2en';
+use feature 'say';
+
+say((shift // 42) =~ s/((\d)\2*)/num2en(length $1)." $2 "/egr)
diff --git a/challenge-091/juliodcs/perl/ch-2.pl b/challenge-091/juliodcs/perl/ch-2.pl
new file mode 100644
index 0000000000..505fe1a1ee
--- /dev/null
+++ b/challenge-091/juliodcs/perl/ch-2.pl
@@ -0,0 +1,15 @@
+use strict;
+use warnings;
+use Lingua::EN::Numbers 'num2en';
+use feature 'say';
+use experimental 'signatures';
+
+my @input = @ARGV;
+
+sub advance($pos = 0) {
+ return 1 if $pos == @ARGV - 1;
+ return 0 if $pos >= @ARGV || $input[$pos] == 0;
+ return advance($pos + $input[$pos]);
+}
+
+say advance;
diff --git a/challenge-091/juliodcs/raku/ch-1.raku b/challenge-091/juliodcs/raku/ch-1.raku
new file mode 100644
index 0000000000..87e3053fe2
--- /dev/null
+++ b/challenge-091/juliodcs/raku/ch-1.raku
@@ -0,0 +1,39 @@
+#! /usr/bin/env raku
+
+my @names20 = <zero one two three four five six seven eight nine
+ ten eleven twelve thirteen fourteen fifteen sixteen
+ seventeen eighteen nineteen>;
+
+my @tens = <twenty thirty forty fifty sixty seventy eighty ninety>;
+
+my @zillions = [
+ [10 ** 3, 'thousand'],
+ [10 ** 6, 'million' ],
+ [10 ** 9, 'billion' ],
+ [10 ** 12, 'trillion'],
+ # ... add as you need ...
+];
+
+multi num-to-en($number where * < 20) {
+ @names20[$number]
+}
+
+multi num-to-en($number where * < 100) {
+ my $end := $number % 10 ?? '-' ~ num-to-en $number % 10 !! '';
+ @tens[($number div 10) - 2] ~ $end
+}
+
+multi num-to-en($number where * < 1000) {
+ my $prefix := num-to-en($number div 100) ~ ' hundred';
+ my $end := $number % 100 ?? ' ' ~ num-to-en $number % 100 !! '';
+ $prefix ~ $end
+}
+
+multi num-to-en($number where * < @zillions.tail.head) {
+ my ($value, $name) = @zillions.grep(*.head < $number).sort.tail;
+ my $prefix := num-to-en($number div $value) ~ " $name";
+ my $end := $number % $value ?? ' ' ~ num-to-en($number % $value) !! '';
+ $prefix ~ $end
+}
+
+say (@*ARGS.head // 42).subst: /((\d)$0*)/, {"{num-to-en $0.chars} $0[0] "}, :g;
diff --git a/challenge-091/juliodcs/raku/ch-2.raku b/challenge-091/juliodcs/raku/ch-2.raku
new file mode 100644
index 0000000000..0e56087dd7
--- /dev/null
+++ b/challenge-091/juliodcs/raku/ch-2.raku
@@ -0,0 +1,10 @@
+#! /usr/bin/env raku
+
+my @N := @*ARGS>>.Int;
+
+multi advance($pos where * == @N.elems.pred) { 1 }
+multi advance($pos where * >= @N.elems ) { 0 }
+multi advance($pos where @N[$pos] == 0) { 1 }
+multi advance($pos = 0) { advance $pos + @N[$pos] }
+
+say advance;