aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLance Wicks <lw@judocoach.com>2021-04-06 16:55:51 +0100
committerLance Wicks <lw@judocoach.com>2021-04-06 16:55:51 +0100
commit0f0f34a43ef6be5b591eb53667bcd4695862e88f (patch)
tree17c406bea049f4ac7e3375c10eb5a767f3708912
parentb37f0ec54ec1d6f4953a2fdba7822d588ca4127c (diff)
downloadperlweeklychallenge-club-0f0f34a43ef6be5b591eb53667bcd4695862e88f.tar.gz
perlweeklychallenge-club-0f0f34a43ef6be5b591eb53667bcd4695862e88f.tar.bz2
perlweeklychallenge-club-0f0f34a43ef6be5b591eb53667bcd4695862e88f.zip
Add Perl solution and blog post (incl. video)
-rw-r--r--challenge-107/lance-wicks/blog.txt1
-rw-r--r--challenge-107/lance-wicks/perl/lib/Descriptive.pm31
-rw-r--r--challenge-107/lance-wicks/perl/t/01-numbers.t13
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..079e6cd990
--- /dev/null
+++ b/challenge-107/lance-wicks/blog.txt
@@ -0,0 +1 @@
+https://perl.kiwi/tales/2021/04/06/perl-weekly-challege-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;