aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--challenge-187/james-smith/perl/ch-2.pl19
1 files changed, 15 insertions, 4 deletions
diff --git a/challenge-187/james-smith/perl/ch-2.pl b/challenge-187/james-smith/perl/ch-2.pl
index e08218ad26..006e0018d5 100644
--- a/challenge-187/james-smith/perl/ch-2.pl
+++ b/challenge-187/james-smith/perl/ch-2.pl
@@ -13,24 +13,35 @@ my @TESTS = (
[ [1,3,2], '' ],
[ [1,1,2,3], '' ],
[ [2,4,3], '4 3 2' ],
+ [ [1..10], '10 9 8' ],
+ [ [7,4,1], '' ],
+ [ [201,101,1], '' ],
+ [ [1,1,2,3,4,5,2,1,2,3,2,1,1,1,1,1], '5 4 3' ],
);
+for( 1..100 ) {
+ my @T = map { 1 + int rand 20 } 1 .. 3 + int rand 17;
+ my $r = join ' ', (sort {$b<=>$a} @T)[0,1,2];
+ push @TESTS, [ \@T, $r ]
+}
+
+
is( "@{[magical(@{$_->[0]})]}", $_->[1] ) foreach @TESTS;
done_testing();
sub magical {
@_ = sort { $b <=> $a } @_;
- my @max = (0);
while(@_>2) {
my($a,$b,@c)=@_;
while(@c) {
- ($a+$b>$_) && ($b+$_>$a) && ($a+$_>$b) && ($a+$b+$_>$max[0]) && (@max=($a+$b+$_,$a,$b,$_)) for @c;
+ ($b+$_>$a) ? (return $a,$b,$_ ) : last for @c;
$b = shift @c;
}
shift;
}
- shift @max;
- @max;
+ ();
+ #shift @max;
+ #@max;
}