aboutsummaryrefslogtreecommitdiff
path: root/challenge-182
diff options
context:
space:
mode:
authordrbaggy <js5@sanger.ac.uk>2022-09-18 06:43:14 +0100
committerdrbaggy <js5@sanger.ac.uk>2022-09-18 06:43:14 +0100
commita75b42628a8537503fe40bd8eba8674a75a3563d (patch)
tree55b97cfea2497ea8b20348df0dfc9569822f43c3 /challenge-182
parent21aeede55d20d4f5c20d0af42cacafd593c455d2 (diff)
downloadperlweeklychallenge-club-a75b42628a8537503fe40bd8eba8674a75a3563d.tar.gz
perlweeklychallenge-club-a75b42628a8537503fe40bd8eba8674a75a3563d.tar.bz2
perlweeklychallenge-club-a75b42628a8537503fe40bd8eba8674a75a3563d.zip
updated with comparison
Diffstat (limited to 'challenge-182')
-rw-r--r--challenge-182/james-smith/perl/ch-1.pl24
1 files changed, 22 insertions, 2 deletions
diff --git a/challenge-182/james-smith/perl/ch-1.pl b/challenge-182/james-smith/perl/ch-1.pl
index 800616c949..c139bd4c56 100644
--- a/challenge-182/james-smith/perl/ch-1.pl
+++ b/challenge-182/james-smith/perl/ch-1.pl
@@ -11,15 +11,35 @@ use Data::Dumper qw(Dumper);
my @TESTS = (
[ [5, 2, 9, 1, 7, 6], 2 ],
[ [4, 2, 3, 1, 5, 0], 4 ],
+ [ [map({rand 1000}1..999),10000], 999 ],
+ map {
+ [ [ 1..$_, reverse( ($_+1)..1000 )], $_ ]
+ } (0,310,330,350,999)
);
-is( max_index(@{$_->[0]}), $_->[1] ) foreach @TESTS;
+is( max_index( @{$_->[0]}), $_->[1] ) foreach @TESTS;
+is( max_index_var(@{$_->[0]}), $_->[1] ) foreach @TESTS;
done_testing();
+cmpthese( 10000, { 'index' => sub { max_index( @{$_->[0]}) for @TESTS[2]; }, 'var' => sub { max_index_var(@{$_->[0]}) for @TESTS[2]; }, });
+cmpthese( 10000, { 'index' => sub { max_index( @{$_->[0]}) for @TESTS[3]; }, 'var' => sub { max_index_var(@{$_->[0]}) for @TESTS[3]; }, });
+cmpthese( 10000, { 'index' => sub { max_index( @{$_->[0]}) for @TESTS[4]; }, 'var' => sub { max_index_var(@{$_->[0]}) for @TESTS[4]; }, });
+cmpthese( 10000, { 'index' => sub { max_index( @{$_->[0]}) for @TESTS[5]; }, 'var' => sub { max_index_var(@{$_->[0]}) for @TESTS[5]; }, });
+cmpthese( 10000, { 'index' => sub { max_index( @{$_->[0]}) for @TESTS[6]; }, 'var' => sub { max_index_var(@{$_->[0]}) for @TESTS[6]; }, });
+cmpthese( 10000, { 'index' => sub { max_index( @{$_->[0]}) for @TESTS[7]; }, 'var' => sub { max_index_var(@{$_->[0]}) for @TESTS[7]; }, });
+
sub max_index {
+ return unless @_;
my $m=0;
- $_[$_]>$_[$m] && ($m=$_) for 0..$#_;
+ $_[$_]>$_[$m] && ($m=$_) for 1..$#_;
+ $m;
+}
+
+sub max_index_var {
+ return unless @_;
+ my $v = $_[ my $m=0 ];
+ $_[$_]>$v && ($v=$_[$m=$_]) for 1..$#_;
$m;
}