diff options
| author | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2024-05-01 00:10:03 +0100 |
|---|---|---|
| committer | Mohammad S Anwar <mohammad.anwar@yahoo.com> | 2024-05-01 00:10:03 +0100 |
| commit | ee37313350481c038cc89a9bc7d22bc55810ba78 (patch) | |
| tree | 3cfaecfa6737404915903d85ed29d968626a6dbe | |
| parent | e4399e45502910c398f99eed84f04468c2881dc5 (diff) | |
| parent | 3ac919886cbffc5605359eedaa997b0a559c25c2 (diff) | |
| download | perlweeklychallenge-club-ee37313350481c038cc89a9bc7d22bc55810ba78.tar.gz perlweeklychallenge-club-ee37313350481c038cc89a9bc7d22bc55810ba78.tar.bz2 perlweeklychallenge-club-ee37313350481c038cc89a9bc7d22bc55810ba78.zip | |
Merge branch 'packy-master'
| -rw-r--r-- | challenge-266/packy-anderson/blog.txt | 2 | ||||
| -rw-r--r-- | challenge-267/packy-anderson/README.md | 2 | ||||
| -rw-r--r-- | challenge-267/packy-anderson/blog.txt | 1 | ||||
| -rwxr-xr-x | challenge-267/packy-anderson/perl/ch-1.pl | 34 | ||||
| -rwxr-xr-x | challenge-267/packy-anderson/perl/ch-2.pl | 52 | ||||
| -rwxr-xr-x | challenge-267/packy-anderson/python/ch-1.py | 33 | ||||
| -rwxr-xr-x | challenge-267/packy-anderson/python/ch-2.py | 48 | ||||
| -rwxr-xr-x | challenge-267/packy-anderson/raku/ch-1.raku | 32 | ||||
| -rwxr-xr-x | challenge-267/packy-anderson/raku/ch-2.raku | 50 |
9 files changed, 252 insertions, 2 deletions
diff --git a/challenge-266/packy-anderson/blog.txt b/challenge-266/packy-anderson/blog.txt index a43da805a2..2827d33263 100644 --- a/challenge-266/packy-anderson/blog.txt +++ b/challenge-266/packy-anderson/blog.txt @@ -1 +1 @@ -https://packy.dardan.com/2024/04/23/perl-weekly-challenge-a-matrix-of-uncommon-x-words +https://packy.dardan.com/b/KX diff --git a/challenge-267/packy-anderson/README.md b/challenge-267/packy-anderson/README.md index 3f4d321553..3c4bbfa52c 100644 --- a/challenge-267/packy-anderson/README.md +++ b/challenge-267/packy-anderson/README.md @@ -16,4 +16,4 @@ ## Blog Post -[A Matrix of Uncommon X Words](https://packy.dardan.com/b/KX) +[It’s the Product Line Sign that Counts](https://packy.dardan.com/b/Ko) diff --git a/challenge-267/packy-anderson/blog.txt b/challenge-267/packy-anderson/blog.txt new file mode 100644 index 0000000000..929da738b5 --- /dev/null +++ b/challenge-267/packy-anderson/blog.txt @@ -0,0 +1 @@ +https://packy.dardan.com/b/Ko
\ No newline at end of file diff --git a/challenge-267/packy-anderson/perl/ch-1.pl b/challenge-267/packy-anderson/perl/ch-1.pl new file mode 100755 index 0000000000..e1a4b15eba --- /dev/null +++ b/challenge-267/packy-anderson/perl/ch-1.pl @@ -0,0 +1,34 @@ +#!/usr/bin/env perl +use v5.38; + +use List::Util qw( reduce ); + +sub productSign(@ints) { + my $product = reduce { $a * $b } @ints; + my $sign = $product == 0 ? 0 + : $product/abs($product); + my $explain = 'The product ' . join(' × ', @ints) + . " => $product"; + if ($sign < 0) { + $explain .= " < 0"; + } + elsif ($sign > 0) { + $explain .= " > 0"; + } + return ($sign, $explain); +} + +sub solution($ints) { + say 'Input: @ints = (' . join(', ', @$ints) . ')'; + my ($sign, $explain) = productSign(@$ints); + say "Output: $sign\n$explain"; +} + +say "Example 1:"; +solution([-1, -2, -3, -4, 3, 2, 1]); + +say "\nExample 2:"; +solution([1, 2, 0, -2, -1]); + +say "\nExample 3:"; +solution([-1, -1, 1, -1, 2]);
\ No newline at end of file diff --git a/challenge-267/packy-anderson/perl/ch-2.pl b/challenge-267/packy-anderson/perl/ch-2.pl new file mode 100755 index 0000000000..66d8e74c1b --- /dev/null +++ b/challenge-267/packy-anderson/perl/ch-2.pl @@ -0,0 +1,52 @@ +#!/usr/bin/env perl +use v5.38; + +use List::Util qw( mesh ); + +sub lineCounts($str, @widths) { + my ($lines, $last_line, $last_width, $explain) = + (0, '', 0, ''); + my %width = mesh ['a' .. 'z'], \@widths; + foreach my $c ( split //, $str ) { + if ($last_width + $width{$c} > 100) { + $lines++; + $explain .= "\nLine $lines: $last_line " + . "($last_width pixels)"; + ($last_line, $last_width) = ($c, $width{$c}); + } + else { + $last_line .= $c; + $last_width += $width{$c}; + } + } + $lines++; + $explain .= "\nLine $lines: $last_line " + . "($last_width pixels)"; + return ($lines, $last_width, $explain); +} + +sub solution($str, $widths) { + say qq{Input: \$str = "$str"}; + say qq{ \@widths = (} . join(', ', @$widths) . ')'; + my ($lines, $last_width, $explain) = + lineCounts($str, @$widths); + say qq{Output: ($lines, $last_width)$explain}; +} + +say "Example 1:"; +solution( + "abcdefghijklmnopqrstuvwxyz", + [10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10] +); + +say "\nExample 2:"; +solution( + "bbbcccdddaaa", + [4,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10] +); + +say "\nExample 3:"; +solution( + "thequickbrownfoxjumpedoverthelazydog", + [7,8,7,8,7,5,8,8,4,4,8,4,12,8,8,8,8,5,6,4,8,8,12,8,8,7] +);
\ No newline at end of file diff --git a/challenge-267/packy-anderson/python/ch-1.py b/challenge-267/packy-anderson/python/ch-1.py new file mode 100755 index 0000000000..034e7ce8fd --- /dev/null +++ b/challenge-267/packy-anderson/python/ch-1.py @@ -0,0 +1,33 @@ +#!/usr/bin/env python + +from functools import reduce + +def productSign(ints): + product = reduce(lambda a, b: a * b, ints) + sign = 0 if product == 0 else int(product / abs(product)) + + explain = ( + 'The product ' + ' × '.join(map(lambda i: str(i), ints)) + + ' => ' + str(product) + ) + if (sign < 0): explain += " < 0" + if (sign > 0): explain += " > 0" + + return (sign, explain) + +def comma_join(arr): + return ', '.join(map(lambda i: str(i), arr)) + +def solution(ints): + print(f'Input: @arr = ({comma_join(ints)})') + sign, explain = productSign(ints) + print(f'Output: {sign}\n{explain}') + +print('Example 1:') +solution([-1, -2, -3, -4, 3, 2, 1]) + +print('\nExample 2:') +solution([1, 2, 0, -2, -1]) + +print('\nExample 3:') +solution([-1, -1, 1, -1, 2])
\ No newline at end of file diff --git a/challenge-267/packy-anderson/python/ch-2.py b/challenge-267/packy-anderson/python/ch-2.py new file mode 100755 index 0000000000..72c6903c31 --- /dev/null +++ b/challenge-267/packy-anderson/python/ch-2.py @@ -0,0 +1,48 @@ +#!/usr/bin/env python + +def lineCounts(strvar, widths): + (lines, last_line, last_width, explain) = (0, '', 0, '') + # we can't do a range of characters, but we can do a range + # of the ASCII values of the characters + letters = [ chr(c) for c in range(ord('a'), ord('z')+1) ] + width = dict( zip(letters, widths) ) + for c in strvar: + if last_width + width[c] > 100: + lines += 1 + explain += f"\nLine {lines}: {last_line} " + explain += f"({last_width} pixels)" + (last_line, last_width) = (c, width[c]) + else: + last_line += c + last_width += width[c] + lines += 1 + explain += f"\nLine {lines}: {last_line} " + explain += f"({last_width} pixels)" + return (lines, last_width, explain) + +def comma_join(arr): + return ', '.join(map(lambda i: str(i), arr)) + +def solution(strvar, widths): + print(f'Input: $str = "{strvar}"') + print(f' @widths = ({comma_join(widths)})') + (lines, last_width, explain) = lineCounts(strvar, widths) + print(f'Output: ({lines}, {last_width}){explain}') + +print('Example 1:') +solution( + "abcdefghijklmnopqrstuvwxyz", + [10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10] +) + +print('\nExample 2:') +solution( + "bbbcccdddaaa", + [4,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10] +) + +print('\nExample 3:') +solution( + "thequickbrownfoxjumpedoverthelazydog", + [7,8,7,8,7,5,8,8,4,4,8,4,12,8,8,8,8,5,6,4,8,8,12,8,8,7] +)
\ No newline at end of file diff --git a/challenge-267/packy-anderson/raku/ch-1.raku b/challenge-267/packy-anderson/raku/ch-1.raku new file mode 100755 index 0000000000..d03830a9ab --- /dev/null +++ b/challenge-267/packy-anderson/raku/ch-1.raku @@ -0,0 +1,32 @@ +#!/usr/bin/env raku +use v6; + +sub productSign(@ints) { + my $product = [*] @ints; + my $sign = $product == 0 ?? 0 + !! $product/abs($product); + my $explain = 'The product ' ~ @ints.join(' × ') + ~ " => $product"; + if ($sign < 0) { + $explain ~= " < 0"; + } + elsif ($sign > 0) { + $explain ~= " > 0"; + } + return ($sign, $explain); +} + +sub solution(@ints) { + say 'Input: @arr = (' ~ @ints.join(', ') ~ ')'; + my ($sign, $explain) = productSign(@ints); + say "Output: $sign\n$explain"; +} + +say "Example 1:"; +solution([-1, -2, -3, -4, 3, 2, 1]); + +say "\nExample 2:"; +solution([1, 2, 0, -2, -1]); + +say "\nExample 3:"; +solution([-1, -1, 1, -1, 2]);
\ No newline at end of file diff --git a/challenge-267/packy-anderson/raku/ch-2.raku b/challenge-267/packy-anderson/raku/ch-2.raku new file mode 100755 index 0000000000..cd543421cc --- /dev/null +++ b/challenge-267/packy-anderson/raku/ch-2.raku @@ -0,0 +1,50 @@ +#!/usr/bin/env raku +use v6; + +sub lineCounts($str, @widths) { + my ($lines, $last_line, $last_width, $explain) = + (0, '', 0, ''); + my %width = ('a' .. 'z' Z @widths).flat.Hash; + for $str.comb -> $c { + if ($last_width + %width{$c} > 100) { + $lines++; + $explain ~= "\nLine $lines: $last_line " + ~ "($last_width pixels)"; + ($last_line, $last_width) = ($c, %width{$c}); + } + else { + $last_line ~= $c; + $last_width += %width{$c}; + } + } + $lines++; + $explain ~= "\nLine $lines: $last_line " + ~ "($last_width pixels)"; + return ($lines, $last_width, $explain); +} + +sub solution($str, @widths) { + say qq{Input: \$str = "$str"}; + say qq{ \@widths = (} ~ @widths.join(', ') ~ ')'; + my ($lines, $last_width, $explain) = + lineCounts($str, @widths); + say qq{Output: ($lines, $last_width)$explain}; +} + +say "Example 1:"; +solution( + "abcdefghijklmnopqrstuvwxyz", + [10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10] +); + +say "\nExample 2:"; +solution( + "bbbcccdddaaa", + [4,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10] +); + +say "\nExample 3:"; +solution( + "thequickbrownfoxjumpedoverthelazydog", + [7,8,7,8,7,5,8,8,4,4,8,4,12,8,8,8,8,5,6,4,8,8,12,8,8,7] +);
\ No newline at end of file |
