aboutsummaryrefslogtreecommitdiff
path: root/challenge-124
diff options
context:
space:
mode:
authorMohammad S Anwar <Mohammad.Anwar@yahoo.com>2021-08-09 07:28:42 +0100
committerGitHub <noreply@github.com>2021-08-09 07:28:42 +0100
commitb4fa3cf2f3757d4d27f58bc86d228c19045a0021 (patch)
tree26598c3283f00f97d2f322acc184c9cd07a0dbdf /challenge-124
parent72220756c44d49f3ab207c85da347447902f4ae0 (diff)
parentc04b55d7238aa3f80a8243e30a4a061b8983b729 (diff)
downloadperlweeklychallenge-club-b4fa3cf2f3757d4d27f58bc86d228c19045a0021.tar.gz
perlweeklychallenge-club-b4fa3cf2f3757d4d27f58bc86d228c19045a0021.tar.bz2
perlweeklychallenge-club-b4fa3cf2f3757d4d27f58bc86d228c19045a0021.zip
Merge pull request #4685 from jaldhar/challenge-124
Challenge 124 by Jaldhar H. Vyas
Diffstat (limited to 'challenge-124')
-rw-r--r--challenge-124/jaldhar-h-vyas/blog.txt1
-rwxr-xr-xchallenge-124/jaldhar-h-vyas/perl/ch-1.pl38
-rwxr-xr-xchallenge-124/jaldhar-h-vyas/perl/ch-2.pl69
-rwxr-xr-xchallenge-124/jaldhar-h-vyas/raku/ch-1.raku34
-rwxr-xr-xchallenge-124/jaldhar-h-vyas/raku/ch-2.raku30
5 files changed, 172 insertions, 0 deletions
diff --git a/challenge-124/jaldhar-h-vyas/blog.txt b/challenge-124/jaldhar-h-vyas/blog.txt
new file mode 100644
index 0000000000..9ed490c57d
--- /dev/null
+++ b/challenge-124/jaldhar-h-vyas/blog.txt
@@ -0,0 +1 @@
+https://www.braincells.com/perl/2021/08/perl_weekly_challenge_week_124.html
diff --git a/challenge-124/jaldhar-h-vyas/perl/ch-1.pl b/challenge-124/jaldhar-h-vyas/perl/ch-1.pl
new file mode 100755
index 0000000000..d265ba7f3c
--- /dev/null
+++ b/challenge-124/jaldhar-h-vyas/perl/ch-1.pl
@@ -0,0 +1,38 @@
+#!/usr/bin/perl
+use 5.020;
+use warnings;
+
+sub circle {
+ my ($radius, $c) = @_;
+ my $widthScale = 6;
+ my $width = 3 + int(0.5 + $widthScale * $radius);
+ my $radius2 = $radius ** 2;
+
+ for my $y (-$radius .. $radius) {
+ my $x = (0.5 + ($widthScale * int($radius2 - $y ** 2)) ** 0.5);
+ if ($x < 2) {
+ $x = 2;
+ }
+ say ' ' x (($width / 2) - $x), $c, ' ' x (2 * $x - 4), $c;
+ }
+}
+
+sub cross {
+ my ($height, $c) = @_;
+ my $widthScale = 6;
+ my $width = 3 + int(0.5 + $widthScale * $height);
+ my $height2 = $height ** 2;
+
+ for my $y (0 .. $height) {
+ if ($y == int ($height * 2 / 3)) {
+ my $x = (0.5 + ($widthScale * int($height2 - $y ** 2)) ** 0.5);
+ say ' ' x ($width / 3 - 2), $c x int(3 * $x / 2);
+ } else {
+ say ' ' x ($width / 2), $c;
+ }
+ }
+}
+
+circle(5, '*');
+cross(5, '*');
+
diff --git a/challenge-124/jaldhar-h-vyas/perl/ch-2.pl b/challenge-124/jaldhar-h-vyas/perl/ch-2.pl
new file mode 100755
index 0000000000..24c7d489f9
--- /dev/null
+++ b/challenge-124/jaldhar-h-vyas/perl/ch-2.pl
@@ -0,0 +1,69 @@
+#!/usr/bin/perl
+use 5.020;
+use warnings;
+use English qw/ -no_match_vars /;
+
+sub usage {
+ print <<"-USAGE-";
+Usage:
+ $PROGRAM_NAME [<n> ...]
+
+ [<n> ...] a list of integers
+-USAGE-
+ exit;
+}
+
+sub permute (&@) {
+ my $code = shift;
+ my @idx = 0..$#_;
+ while ( $code->(@_[@idx]) ) {
+ my $p = $#idx;
+ --$p while $idx[$p-1] > $idx[$p];
+ my $q = $p or return;
+ push @idx, reverse splice @idx, $p;
+ ++$q while $idx[$p-1] > $idx[$q];
+ @idx[$p-1,$q]=@idx[$q,$p-1];
+ }
+}
+
+sub sum {
+ my ($arr) = @_;
+ my $total = 0;
+
+ for my $elem (@{$arr}) {
+ $total += $elem;
+ }
+
+ return $total;
+}
+
+scalar @ARGV || usage;
+
+my @n = @ARGV;
+my $part1 = scalar @n / 2;
+my (@best1, @best2);
+my $bestdiff = 'inf';
+
+my @permutations;
+permute { push @permutations, \@_; } @n;
+
+for my $perm (@permutations) {
+ my @subset1 = splice @{$perm}, 0, $part1;
+ my @subset2 = @{$perm};
+ my $total1 = sum \@subset1;
+ my $total2 = sum \@subset2;
+ my $diff = abs($total1 - $total2);
+
+ if ($diff < $bestdiff) {
+ $bestdiff = $diff;
+ @best1 = @subset1;
+ @best2 = @subset2;
+ if ($bestdiff == 0) {
+ last;
+ }
+ }
+}
+
+say "Subset 1 = (", ( join q{, }, sort { $a <=> $b } @best1) , q{)};
+say "Subset 2 = (", ( join q{, }, sort { $a <=> $b } @best2 ), q{)};
+
diff --git a/challenge-124/jaldhar-h-vyas/raku/ch-1.raku b/challenge-124/jaldhar-h-vyas/raku/ch-1.raku
new file mode 100755
index 0000000000..1f961acc15
--- /dev/null
+++ b/challenge-124/jaldhar-h-vyas/raku/ch-1.raku
@@ -0,0 +1,34 @@
+#!/usr/bin/raku
+
+sub circle(Int $radius, $c) {
+ my $widthScale = 6;
+ my $width = 3 + (0.5 + $widthScale * $radius).Int;
+ my $radius2 = $radius ** 2;
+
+ for -$radius .. ($radius) -> $y {
+ my $x = (0.5 + ($widthScale * ($radius2 - $y ** 2)) ** 0.5).Int;
+ say ' ' x (($width div 2) - $x), $c, ' ' x (2 * $x - 4), $c;
+ }
+}
+
+sub cross(Int $height, $c) {
+ my $widthScale = 6;
+ my $width = 3 + (0.5 + $widthScale * $height).Int;
+ my $height2 = $height ** 2;
+
+ for 0 .. $height -> $y {
+ if $y == ($height * 2 / 3).Int {
+ my $x = (0.5 + ($widthScale * ($height2 - $y ** 2)) ** 0.5).Int;
+ say ' ' x $width div 3 - 2, $c x (3 * $x / 2).Int;
+ } else {
+ say ' ' x ($width div 2), $c;
+ }
+ }
+}
+
+sub MAIN() {
+
+ circle(5, '*');
+ cross(5, '*');
+}
+
diff --git a/challenge-124/jaldhar-h-vyas/raku/ch-2.raku b/challenge-124/jaldhar-h-vyas/raku/ch-2.raku
new file mode 100755
index 0000000000..760a50f0fc
--- /dev/null
+++ b/challenge-124/jaldhar-h-vyas/raku/ch-2.raku
@@ -0,0 +1,30 @@
+#!/usr/bin/raku
+
+sub MAIN(
+ *@n #= a list of integers
+) {
+ my $part1 = @n.elems div 2;
+ my $part2 = @n.elems - $part1;
+ my (@best1, @best2);
+ my $bestdiff = Inf;
+
+ for @n.permutations -> @perm {
+ my @subset1 = @perm[0 .. $part1 - 1];
+ my @subset2 = @perm[$part2 - 1 .. *];
+ my $total1 = [+] @subset1;
+ my $total2 = [+] @subset2;
+ my $diff = abs($total1 - $total2);
+ if $diff < $bestdiff {
+ $bestdiff = $diff;
+ @best1 = @subset1;
+ @best2 = @subset2;
+ if $bestdiff == 0 {
+ last;
+ }
+ }
+ }
+
+ say "Subset 1 = (", @best1.sort.join(q{, }), q{)};
+ say "Subset 2 = (", @best2.sort.join(q{, }), q{)};
+}
+