diff options
| -rw-r--r-- | challenge-107/mimosinnet/raku/ch-1.raku | 44 | ||||
| -rw-r--r-- | challenge-107/mimosinnet/raku/ch-2.raku | 33 |
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; + } +} |
