aboutsummaryrefslogtreecommitdiff
path: root/challenge-043/markus-holzer/perl6/lib/Math/SelfDescriptiveNumbers.pm6
diff options
context:
space:
mode:
authorholli-holzer <holli.holzer@gmail.com>2020-01-14 16:58:59 +0100
committerholli-holzer <holli.holzer@gmail.com>2020-01-14 16:58:59 +0100
commit79dddd500946c47f2dc942d9a9114516650fd28d (patch)
tree192a8ac0b9c17e110259235e1e02ad862cc70df6 /challenge-043/markus-holzer/perl6/lib/Math/SelfDescriptiveNumbers.pm6
parentc597c4bba4a22d1c2b637d983ad12f9911ee0ae6 (diff)
downloadperlweeklychallenge-club-79dddd500946c47f2dc942d9a9114516650fd28d.tar.gz
perlweeklychallenge-club-79dddd500946c47f2dc942d9a9114516650fd28d.tar.bz2
perlweeklychallenge-club-79dddd500946c47f2dc942d9a9114516650fd28d.zip
better ways than brute force
Diffstat (limited to 'challenge-043/markus-holzer/perl6/lib/Math/SelfDescriptiveNumbers.pm6')
-rw-r--r--challenge-043/markus-holzer/perl6/lib/Math/SelfDescriptiveNumbers.pm629
1 files changed, 29 insertions, 0 deletions
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 ) )
+}
+