diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2021-04-08 07:06:09 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-04-08 07:06:09 +0100 |
| commit | 7c226dce55a9a7c5cf1d23d097ae4b1754dbbc81 (patch) | |
| tree | 4fc9edd3ac57fc0a13ecc6693d993288a74c1832 | |
| parent | 9af63cd6470207de9cb52dfea010f8ba898fa77d (diff) | |
| parent | 2713bc08057ac11c4d57e1056daad818843e4bea (diff) | |
| download | perlweeklychallenge-club-7c226dce55a9a7c5cf1d23d097ae4b1754dbbc81.tar.gz perlweeklychallenge-club-7c226dce55a9a7c5cf1d23d097ae4b1754dbbc81.tar.bz2 perlweeklychallenge-club-7c226dce55a9a7c5cf1d23d097ae4b1754dbbc81.zip | |
Merge pull request #3848 from polettix/polettix/pwc107
Add polettix's solution to challenge-107
| -rw-r--r-- | challenge-107/polettix/blog.txt | 1 | ||||
| -rw-r--r-- | challenge-107/polettix/blog1.txt | 1 | ||||
| -rw-r--r-- | challenge-107/polettix/perl/Calc.pm | 13 | ||||
| -rw-r--r-- | challenge-107/polettix/perl/ch-1.pl | 50 | ||||
| -rw-r--r-- | challenge-107/polettix/perl/ch-2.pl | 17 |
5 files changed, 82 insertions, 0 deletions
diff --git a/challenge-107/polettix/blog.txt b/challenge-107/polettix/blog.txt new file mode 100644 index 0000000000..7f3416455c --- /dev/null +++ b/challenge-107/polettix/blog.txt @@ -0,0 +1 @@ +https://github.polettix.it/ETOOBUSY/2021/04/07/pwc107-self-descriptive-numbers/ diff --git a/challenge-107/polettix/blog1.txt b/challenge-107/polettix/blog1.txt new file mode 100644 index 0000000000..01d71ba1dc --- /dev/null +++ b/challenge-107/polettix/blog1.txt @@ -0,0 +1 @@ +https://github.polettix.it/ETOOBUSY/2021/04/08/pwc107-list-methods/ diff --git a/challenge-107/polettix/perl/Calc.pm b/challenge-107/polettix/perl/Calc.pm new file mode 100644 index 0000000000..c7786e745e --- /dev/null +++ b/challenge-107/polettix/perl/Calc.pm @@ -0,0 +1,13 @@ +package Calc; + +use strict; +use warnings; + +our $intruder; + +sub new { bless {}, shift; } +sub add { } +sub mul { } +sub div { } + +1; diff --git a/challenge-107/polettix/perl/ch-1.pl b/challenge-107/polettix/perl/ch-1.pl new file mode 100644 index 0000000000..f6d9562165 --- /dev/null +++ b/challenge-107/polettix/perl/ch-1.pl @@ -0,0 +1,50 @@ +#!/usr/bin/env perl +use 5.024; +use warnings; +use experimental qw< postderef signatures >; +no warnings qw< experimental::postderef experimental::signatures >; +use List::Util 'sum'; + +sub nested_loops_iterator { + my ($dims, $opts, $cb, $accumulator) = @_; + return unless scalar @{$dims}; + ($opts, $cb) = ($cb, $opts) if ref($opts) eq 'CODE'; + my @indexes = (-1); + my @accumulator = (undef) x scalar @{$dims}; + return sub { + while ((my $level = $#indexes) >= 0) { + my $dimension = $dims->[$level]; + my $i = ++$indexes[$level]; + if ($i > $#{$dimension}) { pop @indexes } + else { + $accumulator[$level] = $dimension->[$i]; + if ($level == $#{$dims}) { return @accumulator } + else { push @indexes, -1 } + } + } + return; + } +} + +sub is_self_descriptive (@sequence) { + for my $i (0 .. $#sequence) { + my $count = sum map { $_ == $i ? 1 : 0 } @sequence; + return unless $count == $sequence[$i]; + } + return 1; +} + +sub three_self_descriptive_numbers { + my ($b, @found) = (1); + while ('necessary') { + my $it = nested_loops_iterator([map { [0 .. ($b - 1)]} 1 .. $b]); + while (my @args = $it->()) { + push @found, join '', @args if is_self_descriptive(@args); + return @found if @found == 3; + } + ++$b; + } + return @found[0..2]; +} + +say join(', ', three_self_descriptive_numbers()); diff --git a/challenge-107/polettix/perl/ch-2.pl b/challenge-107/polettix/perl/ch-2.pl new file mode 100644 index 0000000000..d0cce77510 --- /dev/null +++ b/challenge-107/polettix/perl/ch-2.pl @@ -0,0 +1,17 @@ +#!/usr/bin/env perl +use 5.024; +use warnings; +use experimental qw< postderef signatures >; +no warnings qw< experimental::postderef experimental::signatures >; + +sub list_methods ($module) { + no strict 'refs'; + return grep { defined &{$module . '::' . $_} } keys %{$module . '::'}; +} + +sub load ($module) { require("$module.pm" =~ s{::}{/}grmxs); $module } + +use FindBin '$Bin'; +use lib $Bin;; +my $module = shift // 'Calc'; +say for list_methods(load($module)); |
