diff options
| author | Mohammad S Anwar <Mohammad.Anwar@yahoo.com> | 2021-08-09 07:28:42 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-08-09 07:28:42 +0100 |
| commit | b4fa3cf2f3757d4d27f58bc86d228c19045a0021 (patch) | |
| tree | 26598c3283f00f97d2f322acc184c9cd07a0dbdf /challenge-124 | |
| parent | 72220756c44d49f3ab207c85da347447902f4ae0 (diff) | |
| parent | c04b55d7238aa3f80a8243e30a4a061b8983b729 (diff) | |
| download | perlweeklychallenge-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.txt | 1 | ||||
| -rwxr-xr-x | challenge-124/jaldhar-h-vyas/perl/ch-1.pl | 38 | ||||
| -rwxr-xr-x | challenge-124/jaldhar-h-vyas/perl/ch-2.pl | 69 | ||||
| -rwxr-xr-x | challenge-124/jaldhar-h-vyas/raku/ch-1.raku | 34 | ||||
| -rwxr-xr-x | challenge-124/jaldhar-h-vyas/raku/ch-2.raku | 30 |
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{)}; +} + |
