diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2022-03-16 00:12:01 +0000 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2022-03-16 00:12:01 +0000 |
| commit | 24e63122ba071239bc964f16df34a87bdfa520e2 (patch) | |
| tree | 138eecb4f2fa9b9a60e43e4c2ee2f3c89495e8a6 /challenge-156 | |
| parent | 47cc91ffed790a5373e7227d50cbf5e5c68f40ef (diff) | |
| download | perlweeklychallenge-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.txt | 1 | ||||
| -rw-r--r-- | challenge-156/laurent-rosenfeld/perl/ch-1.pl | 17 | ||||
| -rw-r--r-- | challenge-156/laurent-rosenfeld/perl/ch-2.pl | 35 | ||||
| -rw-r--r-- | challenge-156/laurent-rosenfeld/raku/ch-1.raku | 8 | ||||
| -rw-r--r-- | challenge-156/laurent-rosenfeld/raku/ch-2.raku | 12 |
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); +} |
