From 79dddd500946c47f2dc942d9a9114516650fd28d Mon Sep 17 00:00:00 2001 From: holli-holzer Date: Tue, 14 Jan 2020 16:58:59 +0100 Subject: better ways than brute force --- .../perl6/lib/Math/SelfDescriptiveNumbers.pm6 | 29 ++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 challenge-043/markus-holzer/perl6/lib/Math/SelfDescriptiveNumbers.pm6 (limited to 'challenge-043/markus-holzer/perl6/lib/Math/SelfDescriptiveNumbers.pm6') diff --git a/challenge-043/markus-holzer/perl6/lib/Math/SelfDescriptiveNumbers.pm6 b/challenge-043/markus-holzer/perl6/lib/Math/SelfDescriptiveNumbers.pm6 new file mode 100644 index 0000000000..8409826549 --- /dev/null +++ b/challenge-043/markus-holzer/perl6/lib/Math/SelfDescriptiveNumbers.pm6 @@ -0,0 +1,29 @@ +unit module Math::SelfDescriptiveNumbers; + +multi sub is-self-descriptive( Int $number, Int $base ) is export { + is-self-descriptive( :$number, :$base ); +} + +multi sub is-self-descriptive( Int :$number, Int :$base ) is export { + $number ∈ self-descriptive-numbers-of( $base ); +} + +multi sub is-self-descriptive( Str $number, Int $base ) is export { + is-self-descriptive( :$number, :$base ); +} + +multi sub is-self-descriptive( Str :$number, Int :$base ) is export { + parse-base( $number, $base ) ∈ self-descriptive-numbers-of( $base ); +} + +sub self-descriptive-numbers is export { + ( 1 .. 36 ).map({ ( $_, self-descriptive-numbers-of( $_ ) ) }); +} + +multi sub self-descriptive-numbers-of( Int $base where $_ ~~ 1|2|3|6 ) is export { () } +multi sub self-descriptive-numbers-of( Int $base where $_ == 4 ) is export { (100, 136) } +multi sub self-descriptive-numbers-of( Int $base where $_ == 5 ) is export { (1425) } +multi sub self-descriptive-numbers-of( Int $base ) is export { + ( parse-base( ($base - 4).base( $base ) ~ "21" ~ ( '0' x ($base - 7) ) ~ '1000', $base ) ) +} + -- cgit From d42bbd788c1b240cc5eccd183291b8eef9aec7e3 Mon Sep 17 00:00:00 2001 From: holli-holzer Date: Tue, 14 Jan 2020 17:15:17 +0100 Subject: better ways than brute force --- .../perl6/lib/Math/SelfDescriptiveNumbers.pm6 | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'challenge-043/markus-holzer/perl6/lib/Math/SelfDescriptiveNumbers.pm6') diff --git a/challenge-043/markus-holzer/perl6/lib/Math/SelfDescriptiveNumbers.pm6 b/challenge-043/markus-holzer/perl6/lib/Math/SelfDescriptiveNumbers.pm6 index 8409826549..974f0c532a 100644 --- a/challenge-043/markus-holzer/perl6/lib/Math/SelfDescriptiveNumbers.pm6 +++ b/challenge-043/markus-holzer/perl6/lib/Math/SelfDescriptiveNumbers.pm6 @@ -5,7 +5,7 @@ multi sub is-self-descriptive( Int $number, Int $base ) is export { } multi sub is-self-descriptive( Int :$number, Int :$base ) is export { - $number ∈ self-descriptive-numbers-of( $base ); + $number.base( $base ) ∈ self-descriptive-numbers-of( $base ); } multi sub is-self-descriptive( Str $number, Int $base ) is export { @@ -13,17 +13,21 @@ multi sub is-self-descriptive( Str $number, Int $base ) is export { } multi sub is-self-descriptive( Str :$number, Int :$base ) is export { - parse-base( $number, $base ) ∈ self-descriptive-numbers-of( $base ); + $number ∈ self-descriptive-numbers-of( $base ); } sub self-descriptive-numbers is export { - ( 1 .. 36 ).map({ ( $_, self-descriptive-numbers-of( $_ ) ) }); + ( 1 .. 36 ).map( -> $base { ( $base, self-descriptive-numbers-of( $base ) ) }); +} + +sub self-descriptive-numbers-dec is export { + ( 1 .. 36 ).map( -> $base { ( $base, self-descriptive-numbers-of( $base ).map({ parse-base($_, $base ) }) ) }); } multi sub self-descriptive-numbers-of( Int $base where $_ ~~ 1|2|3|6 ) is export { () } -multi sub self-descriptive-numbers-of( Int $base where $_ == 4 ) is export { (100, 136) } -multi sub self-descriptive-numbers-of( Int $base where $_ == 5 ) is export { (1425) } +multi sub self-descriptive-numbers-of( Int $base where $_ == 4 ) is export { ('1210', '2020') } +multi sub self-descriptive-numbers-of( Int $base where $_ == 5 ) is export { ('21200') } multi sub self-descriptive-numbers-of( Int $base ) is export { - ( parse-base( ($base - 4).base( $base ) ~ "21" ~ ( '0' x ($base - 7) ) ~ '1000', $base ) ) + ( ($base - 4).base( $base ) ~ "21" ~ ( '0' x ($base - 7) ) ~ '1000' ) } -- cgit