diff options
| -rw-r--r-- | challenge-107/lance-wicks/blog.txt | 1 | ||||
| -rw-r--r-- | challenge-107/lance-wicks/perl/lib/Descriptive.pm | 31 | ||||
| -rw-r--r-- | challenge-107/lance-wicks/perl/t/01-numbers.t | 13 |
3 files changed, 45 insertions, 0 deletions
diff --git a/challenge-107/lance-wicks/blog.txt b/challenge-107/lance-wicks/blog.txt new file mode 100644 index 0000000000..afc6d20266 --- /dev/null +++ b/challenge-107/lance-wicks/blog.txt @@ -0,0 +1 @@ +https://perl.kiwi/tales/2021/04/06/perl-weekly-challenge-107-self-describing-numbers-live-coded/ diff --git a/challenge-107/lance-wicks/perl/lib/Descriptive.pm b/challenge-107/lance-wicks/perl/lib/Descriptive.pm new file mode 100644 index 0000000000..5f4f1b5b6d --- /dev/null +++ b/challenge-107/lance-wicks/perl/lib/Descriptive.pm @@ -0,0 +1,31 @@ +package Descriptive; + +use Moo; + +sub list { + my $self = shift; + my @list; + + for my $num (1..30_000) { + push @list, $num if $self->is_self_desc($num); + } + + return \@list; +} + +sub is_self_desc { + my ($self,$num) = @_; + + my $description; + for my $int (0..9) { + $description .= () = $num =~ /$int/g; + } + my $length_of_num = length $num; + + $description = substr $description, 0, $length_of_num; + + return 1 if $description == $num; + return 0; +} + +1; diff --git a/challenge-107/lance-wicks/perl/t/01-numbers.t b/challenge-107/lance-wicks/perl/t/01-numbers.t new file mode 100644 index 0000000000..874f18ca8e --- /dev/null +++ b/challenge-107/lance-wicks/perl/t/01-numbers.t @@ -0,0 +1,13 @@ +use Test2::V0 -target => 'Descriptive'; + +subtest 'is_self_desc' => sub { + is $CLASS->is_self_desc(1210), 1, '1210 is a self describing number'; + is $CLASS->is_self_desc(1), 0, '1 is NOT a self describing number'; +}; + +subtest 'list' => sub { + is $CLASS->list, [1210,2020,21200], 'List returns the first three numbers'; +}; + + +done_testing; |
