diff options
| author | Simon Green <mail@simon.green> | 2021-04-11 16:25:22 +1000 |
|---|---|---|
| committer | Simon Green <mail@simon.green> | 2021-04-11 16:25:22 +1000 |
| commit | 477ac22227859ee93e3ff62ec7ce5867998ea86f (patch) | |
| tree | 875b7702e90ab32fc62670b288f7fe8f4fa7eb19 /challenge-107 | |
| parent | 04d3460b4e3038f5e5ef064acd86de5123f6c61b (diff) | |
| download | perlweeklychallenge-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.md | 4 | ||||
| -rw-r--r-- | challenge-107/sgreen/blog.txt | 1 | ||||
| -rw-r--r-- | challenge-107/sgreen/perl/Calc.pm | 11 | ||||
| -rwxr-xr-x | challenge-107/sgreen/perl/ch-1.pl | 40 | ||||
| -rwxr-xr-x | challenge-107/sgreen/perl/ch-2.pl | 24 |
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); |
