aboutsummaryrefslogtreecommitdiff
path: root/challenge-083/daniel-mita
diff options
context:
space:
mode:
authorDaniel Mita <mienaikage@gmail.com>2020-10-25 22:29:36 +0000
committerDaniel Mita <mienaikage@gmail.com>2020-10-25 22:29:36 +0000
commit8e1cfd624b4a8452e4e57d72448adc688682fdbb (patch)
tree57e21190047fac174812b9768361cdd839281de8 /challenge-083/daniel-mita
parent4928284eb30cf4ad0a895575017ce83dc220b0c2 (diff)
downloadperlweeklychallenge-club-8e1cfd624b4a8452e4e57d72448adc688682fdbb.tar.gz
perlweeklychallenge-club-8e1cfd624b4a8452e4e57d72448adc688682fdbb.tar.bz2
perlweeklychallenge-club-8e1cfd624b4a8452e4e57d72448adc688682fdbb.zip
Add solution for challenge-083-2 in Perl
Diffstat (limited to 'challenge-083/daniel-mita')
-rwxr-xr-xchallenge-083/daniel-mita/perl/ch-2.pl27
-rwxr-xr-xchallenge-083/daniel-mita/raku/ch-2.raku6
2 files changed, 30 insertions, 3 deletions
diff --git a/challenge-083/daniel-mita/perl/ch-2.pl b/challenge-083/daniel-mita/perl/ch-2.pl
new file mode 100755
index 0000000000..9883d94635
--- /dev/null
+++ b/challenge-083/daniel-mita/perl/ch-2.pl
@@ -0,0 +1,27 @@
+#!/usr/bin/env perl
+
+use strict;
+use warnings;
+use feature qw<say>;
+
+use List::Util qw<sum>;
+use Scalar::Util qw<looks_like_number>;
+
+if ( @ARGV == 0 || grep { !looks_like_number($_) || $_ < 1 } @ARGV ) {
+ say 'List of positive numbers required.';
+ exit 1;
+}
+
+my @combinations;
+for ( my $i = 0; $i < @ARGV; $i++ ) {
+ for ( my $j = $i; $j < @ARGV; $j++ ) {
+ push @combinations, [ @ARGV[ $i .. $j ] ];
+ }
+}
+
+say scalar(
+ @{ [ sort { sum( @{$b} ) <=> sum( @{$a} ) || @{$a} <=> @{$b} }
+ grep { sum( @{$_} ) <= sum(@ARGV) / 2 } @combinations
+ ]->[0]
+ }
+);
diff --git a/challenge-083/daniel-mita/raku/ch-2.raku b/challenge-083/daniel-mita/raku/ch-2.raku
index ed5730718d..3c72a13df6 100755
--- a/challenge-083/daniel-mita/raku/ch-2.raku
+++ b/challenge-083/daniel-mita/raku/ch-2.raku
@@ -1,12 +1,12 @@
#!/usr/bin/env raku
sub MAIN(
- *@positive-ints where { .elems > 0 && .all ~~ Int && .all > 0 }
+ *@positive-nums where { .elems > 0 && .all.Rat && .all > 0 }
--> Nil
) {
@(
- @positive-ints.combinations(1..*)
- .grep( *.sum ≤ @positive-ints.sum / 2 )
+ @positive-nums.combinations(1..*)
+ .grep( *.sum ≤ @positive-nums.sum / 2 )
.sort({ $^b.sum <=> $^a.sum || $a.elems <=> $b.elems })
)[0].elems.say;
}