aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2021-12-27 07:50:36 +0000
committerGitHub <noreply@github.com>2021-12-27 07:50:36 +0000
commit1f56bdf48d8cb79772c695c1a1130b729297ab17 (patch)
tree64e33c4b2c0ebfd1891bfd76df8466d0cbc3e62d
parentc4acdc630726947f45d1a41c06a7370c1c87d27a (diff)
parent8949db7c665d7b4e0a0ad5a673e0634daf94e44b (diff)
downloadperlweeklychallenge-club-1f56bdf48d8cb79772c695c1a1130b729297ab17.tar.gz
perlweeklychallenge-club-1f56bdf48d8cb79772c695c1a1130b729297ab17.tar.bz2
perlweeklychallenge-club-1f56bdf48d8cb79772c695c1a1130b729297ab17.zip
Merge pull request #5423 from jaldhar/challenge-144
Challenge 144 by Jaldhar H. Vyas.
-rw-r--r--challenge-144/jaldhar-h-vyas/blog.txt1
-rwxr-xr-xchallenge-144/jaldhar-h-vyas/perl/ch-1.pl61
-rwxr-xr-xchallenge-144/jaldhar-h-vyas/perl/ch-2.pl49
-rwxr-xr-xchallenge-144/jaldhar-h-vyas/raku/ch-1.raku17
-rwxr-xr-xchallenge-144/jaldhar-h-vyas/raku/ch-2.raku21
5 files changed, 149 insertions, 0 deletions
diff --git a/challenge-144/jaldhar-h-vyas/blog.txt b/challenge-144/jaldhar-h-vyas/blog.txt
new file mode 100644
index 0000000000..d91e8e7631
--- /dev/null
+++ b/challenge-144/jaldhar-h-vyas/blog.txt
@@ -0,0 +1 @@
+https://www.braincells.com/perl/2021/12/perl_weekly_challenge_week_144.html
diff --git a/challenge-144/jaldhar-h-vyas/perl/ch-1.pl b/challenge-144/jaldhar-h-vyas/perl/ch-1.pl
new file mode 100755
index 0000000000..3266e5a9e6
--- /dev/null
+++ b/challenge-144/jaldhar-h-vyas/perl/ch-1.pl
@@ -0,0 +1,61 @@
+#!/usr/bin/perl
+use 5.020;
+use warnings;
+
+sub combinations {
+ my @list = @{$_[0]};
+ my $length = $_[1];
+
+ if ($length <= 1) {
+ return map [$_], @list;
+ }
+
+ my @combos;
+
+ for (my $i = 0; $i + $length <= scalar @list; $i++) {
+ my $val = $list[$i];
+ my @rest = @list[$i + 1 .. $#list];
+ for my $c (combinations(\@rest, $length - 1)) {
+ push @combos, [$val, @{$c}] ;
+ }
+ }
+
+ return @combos;
+}
+
+sub isPrime {
+ my ($n) = @_;
+
+ if ($n < 2) {
+ return undef;
+ }
+
+ if ($n == 2) {
+ return 1;
+ }
+
+ for my $i (2 .. sqrt($n)) {
+ if ($n % $i == 0) {
+ return undef;
+ }
+ }
+
+ return 1;
+}
+
+my @semiprimes;
+
+for my $n (2 .. 100) {
+ my @factors = grep { $n % $_ == 0 && isPrime($_) } (2 .. $n / 2);
+ if (scalar @factors == 1 && $factors[0] * $factors[0] == $n) {
+ push @semiprimes, $n;
+ } elsif(
+ scalar
+ (grep { $_ == $n }
+ (map { $_->[0] * $_->[1] }
+ combinations (\@factors, 2)))) {
+ push @semiprimes, $n;
+ }
+}
+
+say join q{, }, @semiprimes; \ No newline at end of file
diff --git a/challenge-144/jaldhar-h-vyas/perl/ch-2.pl b/challenge-144/jaldhar-h-vyas/perl/ch-2.pl
new file mode 100755
index 0000000000..4278139bf1
--- /dev/null
+++ b/challenge-144/jaldhar-h-vyas/perl/ch-2.pl
@@ -0,0 +1,49 @@
+#!/usr/bin/perl
+use 5.020;
+use warnings;
+
+sub combinations {
+ my @list = @{$_[0]};
+ my $length = $_[1];
+
+ if ($length <= 1) {
+ return map [$_], @list;
+ }
+
+ my @combos;
+
+ for (my $i = 0; $i + $length <= scalar @list; $i++) {
+ my $val = $list[$i];
+ my @rest = @list[$i + 1 .. $#list];
+ for my $c (combinations(\@rest, $length - 1)) {
+ push @combos, [$val, @{$c}] ;
+ }
+ }
+
+ return @combos;
+}
+
+if (scalar @ARGV != 2) {
+ die "Need two integers.\n";
+}
+
+my ($u, $v) = @ARGV;
+
+my @ulams = ($u, $v, $u + $v);
+
+while (scalar @ulams < 10) {
+ my @candidates = map { $_->[0] + $_->[1] } combinations(\@ulams, 2);
+
+
+ my %freq;
+ for my $candidate (@candidates) {
+ $freq{$candidate}++;
+ }
+ @candidates = grep { $freq{$_} < 2 } keys %freq;
+
+ @candidates = grep { $a = $_; !grep { $_ == $a } @ulams; } @candidates;
+
+ push @ulams, (sort { $a <=> $b} @candidates)[0];
+}
+
+say join q{, }, @ulams;
diff --git a/challenge-144/jaldhar-h-vyas/raku/ch-1.raku b/challenge-144/jaldhar-h-vyas/raku/ch-1.raku
new file mode 100755
index 0000000000..981258cee1
--- /dev/null
+++ b/challenge-144/jaldhar-h-vyas/raku/ch-1.raku
@@ -0,0 +1,17 @@
+#!/usr/bin/raku
+
+sub MAIN() {
+ my @semiprimes;
+
+ for 2 .. 100 -> $n {
+ my @factors = (2 .. $n / 2).grep({ $n %% $_ && $_.is-prime });
+
+ if @factors.elems == 1 && @factors[0] * @factors[0] == $n {
+ @semiprimes.push($n);
+ } elsif @factors.combinations(2).map({ [*] $_; }).grep({ $_ == $n;}).elems {
+ @semiprimes.push($n);
+ }
+ }
+
+ @semiprimes.join(q{, }).say;
+}
diff --git a/challenge-144/jaldhar-h-vyas/raku/ch-2.raku b/challenge-144/jaldhar-h-vyas/raku/ch-2.raku
new file mode 100755
index 0000000000..1b6939ac84
--- /dev/null
+++ b/challenge-144/jaldhar-h-vyas/raku/ch-2.raku
@@ -0,0 +1,21 @@
+#!/usr/bin/raku
+
+sub MAIN(Int $u, Int $v) {
+ my @ulams = $u, $v, $u + $v;
+
+ while @ulams.elems < 10 {
+ @ulams.push(
+ @ulams
+ .combinations(2)
+ .map({ [+] $_; })
+ .classify( { $_ }, into => my %freq )
+ .keys
+ .map({ $_.Int; })
+ .grep({ %freq{$_}.elems < 2; })
+ .grep({ $_ ∉ @ulams; })
+ .min
+ );
+ }
+
+ @ulams.join(q{, }).say;
+} \ No newline at end of file