aboutsummaryrefslogtreecommitdiff
path: root/challenge-156
diff options
context:
space:
mode:
authorMohammad S Anwar <mohammad.anwar@yahoo.com>2022-03-16 00:12:01 +0000
committerMohammad S Anwar <mohammad.anwar@yahoo.com>2022-03-16 00:12:01 +0000
commit24e63122ba071239bc964f16df34a87bdfa520e2 (patch)
tree138eecb4f2fa9b9a60e43e4c2ee2f3c89495e8a6 /challenge-156
parent47cc91ffed790a5373e7227d50cbf5e5c68f40ef (diff)
downloadperlweeklychallenge-club-24e63122ba071239bc964f16df34a87bdfa520e2.tar.gz
perlweeklychallenge-club-24e63122ba071239bc964f16df34a87bdfa520e2.tar.bz2
perlweeklychallenge-club-24e63122ba071239bc964f16df34a87bdfa520e2.zip
- Added solutions by Laurent Rosenfeld.
Diffstat (limited to 'challenge-156')
-rw-r--r--challenge-156/laurent-rosenfeld/blog.txt1
-rw-r--r--challenge-156/laurent-rosenfeld/perl/ch-1.pl17
-rw-r--r--challenge-156/laurent-rosenfeld/perl/ch-2.pl35
-rw-r--r--challenge-156/laurent-rosenfeld/raku/ch-1.raku8
-rw-r--r--challenge-156/laurent-rosenfeld/raku/ch-2.raku12
5 files changed, 73 insertions, 0 deletions
diff --git a/challenge-156/laurent-rosenfeld/blog.txt b/challenge-156/laurent-rosenfeld/blog.txt
new file mode 100644
index 0000000000..1313a91e40
--- /dev/null
+++ b/challenge-156/laurent-rosenfeld/blog.txt
@@ -0,0 +1 @@
+http://blogs.perl.org/users/laurent_r/2022/03/perl-weekly-challenge-156-pernicious-and-weird-numbers.html
diff --git a/challenge-156/laurent-rosenfeld/perl/ch-1.pl b/challenge-156/laurent-rosenfeld/perl/ch-1.pl
new file mode 100644
index 0000000000..67f952ae10
--- /dev/null
+++ b/challenge-156/laurent-rosenfeld/perl/ch-1.pl
@@ -0,0 +1,17 @@
+use strict;
+use warnings;
+use feature "say";
+
+my $count = 0;
+my %primes = map { $_ => 1 } (2, 3, 5, 7, 11, 13, 17, 19);
+
+for my $n (2..100) {
+ my $bin = sprintf "%b", $n;
+ my $num_1 = 0;
+ $num_1 += $_ for split "", $bin;
+ if (exists $primes{$num_1}) {
+ $count++;
+ print "$n, " and next if $count < 10;
+ say $n and last;
+ }
+}
diff --git a/challenge-156/laurent-rosenfeld/perl/ch-2.pl b/challenge-156/laurent-rosenfeld/perl/ch-2.pl
new file mode 100644
index 0000000000..b05fe35e2f
--- /dev/null
+++ b/challenge-156/laurent-rosenfeld/perl/ch-2.pl
@@ -0,0 +1,35 @@
+use strict;
+use warnings;
+use feature "say";
+
+sub sum {
+ my $sum = 0;
+ $sum += $_ for @_;
+ return $sum;
+}
+
+sub combine {
+ my ($test, $comb, $div) = @_;
+ my @comb_so_far = @$comb;
+ my @divisors = @$div;
+ # say "(@comb_so_far) (@divisors)";
+ return 0 if sum(@comb_so_far) == $test;
+ return 1 if scalar @divisors == 0;
+ for my $i (0..$#divisors) {
+ my $result = combine($test, [@comb_so_far, $divisors[$i]],
+ [@divisors[($i+1)..$#divisors]]);
+ return 0 if $result == 0;
+ }
+ return 1;
+}
+
+sub is_weird {
+ my $n = shift;
+ my @divisors = grep {$n % $_ == 0} 1..($n/2);
+ return 0 if sum(@divisors) <= $n;
+ return combine($n, [], [@divisors]);
+}
+
+for my $m (2..6000) {
+ say "Found $m" if is_weird($m);
+}
diff --git a/challenge-156/laurent-rosenfeld/raku/ch-1.raku b/challenge-156/laurent-rosenfeld/raku/ch-1.raku
new file mode 100644
index 0000000000..d1b1b2d1a3
--- /dev/null
+++ b/challenge-156/laurent-rosenfeld/raku/ch-1.raku
@@ -0,0 +1,8 @@
+my $count = 0;
+for 2..* -> $n {
+ if $n.base(2).comb.sum.is-prime {
+ $count++;
+ print "$n, " and next if $count < 10;
+ say $n and last;
+ }
+}
diff --git a/challenge-156/laurent-rosenfeld/raku/ch-2.raku b/challenge-156/laurent-rosenfeld/raku/ch-2.raku
new file mode 100644
index 0000000000..9221c102ab
--- /dev/null
+++ b/challenge-156/laurent-rosenfeld/raku/ch-2.raku
@@ -0,0 +1,12 @@
+sub is-weird (Int $n where * > 0) {
+ my @divisors = grep {$n %% $_}, 1..$n/2;
+ return False if @divisors.sum <= $n;
+ for @divisors.combinations: 2..@divisors.elems -> $subset {
+ return False if $subset.sum == $n;
+ }
+ True;
+}
+
+for 2..1000 -> $m {
+ say "Found $m" if is-weird($m);
+}