diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2021-12-27 07:50:36 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-12-27 07:50:36 +0000 |
| commit | 1f56bdf48d8cb79772c695c1a1130b729297ab17 (patch) | |
| tree | 64e33c4b2c0ebfd1891bfd76df8466d0cbc3e62d /challenge-144 | |
| parent | c4acdc630726947f45d1a41c06a7370c1c87d27a (diff) | |
| parent | 8949db7c665d7b4e0a0ad5a673e0634daf94e44b (diff) | |
| download | perlweeklychallenge-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.
Diffstat (limited to 'challenge-144')
| -rw-r--r-- | challenge-144/jaldhar-h-vyas/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-144/jaldhar-h-vyas/perl/ch-1.pl | 61 | ||||
| -rwxr-xr-x | challenge-144/jaldhar-h-vyas/perl/ch-2.pl | 49 | ||||
| -rwxr-xr-x | challenge-144/jaldhar-h-vyas/raku/ch-1.raku | 17 | ||||
| -rwxr-xr-x | challenge-144/jaldhar-h-vyas/raku/ch-2.raku | 21 |
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 |
