aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-107/dave-jacoby/blog.txt1
-rw-r--r--challenge-107/dave-jacoby/perl/ch-1.pl38
-rw-r--r--challenge-107/dave-jacoby/perl/ch-2.pl22
3 files changed, 61 insertions, 0 deletions
diff --git a/challenge-107/dave-jacoby/blog.txt b/challenge-107/dave-jacoby/blog.txt
new file mode 100644
index 0000000000..8a6eaf26e4
--- /dev/null
+++ b/challenge-107/dave-jacoby/blog.txt
@@ -0,0 +1 @@
+https://jacoby.github.io/2021/04/05/self-description-redux-perl-weekly-challenge-107.html \ No newline at end of file
diff --git a/challenge-107/dave-jacoby/perl/ch-1.pl b/challenge-107/dave-jacoby/perl/ch-1.pl
new file mode 100644
index 0000000000..0550027d78
--- /dev/null
+++ b/challenge-107/dave-jacoby/perl/ch-1.pl
@@ -0,0 +1,38 @@
+#!/usr/bin/env perl
+
+use strict;
+use warnings;
+use feature qw{ postderef say signatures state };
+no warnings qw{ experimental };
+
+use List::Util qw{ max };
+
+my $n = 1;
+my @self_desc;
+
+while ( scalar @self_desc < 3 ) {
+ if ( is_self_descriptive($n) ) {
+ push @self_desc, $n;
+ say join ' ', @self_desc;
+ }
+ $n++;
+ exit if $n > 1_000_000_000;
+}
+
+sub is_self_descriptive ( $n ) {
+ my $max = max split m{}, $n;
+ my $l = -1 + length $n;
+ return 0 if $max > $l;
+
+ my @arr;
+ for my $i ( 0 .. -1 + length $n ) { $arr[$i] = 0 }
+ for my $i ( split m{|}, $n ) {
+ $arr[$i]++;
+ }
+ my $r = 0 + ( join '', map { $_ || 0 } @arr );
+ return 0 if $r != $n;
+ return 1;
+}
+
+say join "\n\t", scalar @self_desc, @self_desc;
+
diff --git a/challenge-107/dave-jacoby/perl/ch-2.pl b/challenge-107/dave-jacoby/perl/ch-2.pl
new file mode 100644
index 0000000000..1e7673bf5e
--- /dev/null
+++ b/challenge-107/dave-jacoby/perl/ch-2.pl
@@ -0,0 +1,22 @@
+#!/usr/bin/env perl
+
+use strict;
+use warnings;
+use feature qw{ postderef say signatures state };
+no warnings qw{ experimental };
+
+for my $k ( sort keys %Calc:: ) {
+ say $k;
+}
+
+package Calc;
+
+use strict;
+use warnings;
+
+sub new { bless {}, shift; }
+sub add { }
+sub mul { }
+sub div { }
+
+1;