aboutsummaryrefslogtreecommitdiff
path: root/challenge-107
diff options
context:
space:
mode:
authorSimon Green <mail@simon.green>2021-04-11 16:25:22 +1000
committerSimon Green <mail@simon.green>2021-04-11 16:25:22 +1000
commit477ac22227859ee93e3ff62ec7ce5867998ea86f (patch)
tree875b7702e90ab32fc62670b288f7fe8f4fa7eb19 /challenge-107
parent04d3460b4e3038f5e5ef064acd86de5123f6c61b (diff)
downloadperlweeklychallenge-club-477ac22227859ee93e3ff62ec7ce5867998ea86f.tar.gz
perlweeklychallenge-club-477ac22227859ee93e3ff62ec7ce5867998ea86f.tar.bz2
perlweeklychallenge-club-477ac22227859ee93e3ff62ec7ce5867998ea86f.zip
sgreen solution to challenge 107
Diffstat (limited to 'challenge-107')
-rw-r--r--challenge-107/sgreen/README.md4
-rw-r--r--challenge-107/sgreen/blog.txt1
-rw-r--r--challenge-107/sgreen/perl/Calc.pm11
-rwxr-xr-xchallenge-107/sgreen/perl/ch-1.pl40
-rwxr-xr-xchallenge-107/sgreen/perl/ch-2.pl24
5 files changed, 78 insertions, 2 deletions
diff --git a/challenge-107/sgreen/README.md b/challenge-107/sgreen/README.md
index 3080063d8e..178687bc61 100644
--- a/challenge-107/sgreen/README.md
+++ b/challenge-107/sgreen/README.md
@@ -1,3 +1,3 @@
-# The Weekly Challenge 106
+# The Weekly Challenge 107
-Solution by Simon Green. [Blog](https://dev.to/simongreennet/weekly-challenge-106-1cn7)
+Solution by Simon Green. [Blog](https://dev.to/simongreennet/weekly-challenge-107-hm2)
diff --git a/challenge-107/sgreen/blog.txt b/challenge-107/sgreen/blog.txt
new file mode 100644
index 0000000000..a5523fd0a5
--- /dev/null
+++ b/challenge-107/sgreen/blog.txt
@@ -0,0 +1 @@
+https://dev.to/simongreennet/weekly-challenge-107-hm2
diff --git a/challenge-107/sgreen/perl/Calc.pm b/challenge-107/sgreen/perl/Calc.pm
new file mode 100644
index 0000000000..4123090fde
--- /dev/null
+++ b/challenge-107/sgreen/perl/Calc.pm
@@ -0,0 +1,11 @@
+package Calc;
+
+use strict;
+use warnings;
+
+sub new { bless {}, shift; }
+sub add { }
+sub mul { }
+sub div { }
+
+1;
diff --git a/challenge-107/sgreen/perl/ch-1.pl b/challenge-107/sgreen/perl/ch-1.pl
new file mode 100755
index 0000000000..b7a513c751
--- /dev/null
+++ b/challenge-107/sgreen/perl/ch-1.pl
@@ -0,0 +1,40 @@
+#!/usr/bin/perl
+
+use strict;
+use warnings;
+use feature 'say';
+
+sub _is_self_descriptive {
+ my $n = shift;
+ my $l = length($n) - 1;
+
+ # Get a count of each character
+ my @char = (0) x 10;
+ ++$char[ substr( $n, $_, 1 ) ] foreach ( 0 .. $l );
+
+ foreach my $pos ( 0 .. $l ) {
+ # See how many characters we expect
+ my $expect = substr( $n, $pos, 1 );
+
+ # Exit if the numbers don't match
+ return if $expect != $char[$pos];
+ }
+
+ # It's a self descriptive number
+ return 1;
+}
+
+sub main {
+ my @numbers = ();
+ my $number = 0;
+
+ while ( ++$number and @numbers < 3 ) {
+ if ( _is_self_descriptive($number) ) {
+ push @numbers, $number;
+ }
+ }
+
+ say join ', ', @numbers;
+}
+
+main();
diff --git a/challenge-107/sgreen/perl/ch-2.pl b/challenge-107/sgreen/perl/ch-2.pl
new file mode 100755
index 0000000000..b4dac89205
--- /dev/null
+++ b/challenge-107/sgreen/perl/ch-2.pl
@@ -0,0 +1,24 @@
+#!/usr/bin/perl
+
+use strict;
+no strict 'refs';
+use warnings;
+use feature 'say';
+
+sub _inc_filename {
+ my $name = shift;
+ return join( '/', split /(?:\'|::)/, $name ) . '.pm';
+}
+
+sub main {
+ my $package = shift // 'Calc';
+
+ # Import the package
+ my $filename = _inc_filename($package);
+ require $filename;
+
+ # Get a list of methods
+ say foreach grep { defined &{"${package}::$_"} } keys %{"${package}::"};
+}
+
+main(@ARGV);