aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-107/mimosinnet/raku/ch-1.raku44
-rw-r--r--challenge-107/mimosinnet/raku/ch-2.raku33
2 files changed, 77 insertions, 0 deletions
diff --git a/challenge-107/mimosinnet/raku/ch-1.raku b/challenge-107/mimosinnet/raku/ch-1.raku
new file mode 100644
index 0000000000..2949e74cb4
--- /dev/null
+++ b/challenge-107/mimosinnet/raku/ch-1.raku
@@ -0,0 +1,44 @@
+# https://perlweeklychallenge.org/blog/perl-weekly-challenge-107/
+
+# raku ch-1.raku challenge
+
+# is $sdn a self-descriptive-number?
+sub prefix:<Δ>( Int $sdn ) {
+ # the last digit of the self-descriptive number must be 0
+ $sdn ~~ /0$/ &&
+ # self-descriptive numbers have digit sums equal to their base
+ $sdn.chars == $sdn.split('').sum &&
+ # formal definition
+ [and] (0..^$sdn.chars).map({ $sdn.comb[$_] == $sdn.indices($_).elems });
+}
+
+# get first $elems self-descriptive-numbers. Defaults to 3.
+sub challenge( Int $elems = 3 ) {
+ my @numbers;
+ # There are no self-descriptive numbers in bases 1, 2, 3
+ for 1000..^Inf {
+ @numbers.push( $_ ) if Δ$_;
+ return @numbers if @numbers.elems == $elems;
+ }
+}
+
+# This is from Mark Anderson! Neat!
+sub challenge1( Int $elems = 3 ) {
+ (1..^Inf).grep({ Δ$_ }).head($elems)
+}
+
+multi sub MAIN( Int $elems ) {
+ say "Write a script to display the first $elems self-descriptive numbers: ";
+ say 'Output: ',challenge1($elems).Str;
+}
+
+multi sub MAIN( 'challenge' ) {
+ MAIN(3);
+}
+
+multi sub MAIN( 'test' ) is hidden-from-USAGE {
+ use Test;
+
+ is challenge(),(1210, 2020, 21200);
+ is challenge1(),(1210, 2020, 21200);
+}
diff --git a/challenge-107/mimosinnet/raku/ch-2.raku b/challenge-107/mimosinnet/raku/ch-2.raku
new file mode 100644
index 0000000000..d6f588fccb
--- /dev/null
+++ b/challenge-107/mimosinnet/raku/ch-2.raku
@@ -0,0 +1,33 @@
+# https://perlweeklychallenge.org/blog/perl-weekly-challenge-10X/
+
+# This is from Luca Ferrari
+sub challenge( $class ) {
+ return ::($class).^methods( :local ).sort.gist.substr(1,*-1);
+}
+
+multi sub MAIN( Str $class ) {
+ say 'Class: ',$class;
+ say 'Methods: ',challenge($class);
+}
+
+multi sub MAIN( 'challenge' ) {
+ MAIN('Calc');
+}
+
+multi sub MAIN( 'test' ) is hidden-from-USAGE {
+ use Test;
+
+ class Calc {
+ method add() { }
+ method mul() { }
+ method div() { }
+ }
+
+ my @test = (
+ 'Calc', 'BUILDALL add div mul'
+ );
+
+ for @test -> $a, $b {
+ is challenge($a),$b;
+ }
+}