diff options
| author | drbaggy <js5@sanger.ac.uk> | 2022-09-18 06:43:14 +0100 |
|---|---|---|
| committer | drbaggy <js5@sanger.ac.uk> | 2022-09-18 06:43:14 +0100 |
| commit | a75b42628a8537503fe40bd8eba8674a75a3563d (patch) | |
| tree | 55b97cfea2497ea8b20348df0dfc9569822f43c3 /challenge-182/james-smith | |
| parent | 21aeede55d20d4f5c20d0af42cacafd593c455d2 (diff) | |
| download | perlweeklychallenge-club-a75b42628a8537503fe40bd8eba8674a75a3563d.tar.gz perlweeklychallenge-club-a75b42628a8537503fe40bd8eba8674a75a3563d.tar.bz2 perlweeklychallenge-club-a75b42628a8537503fe40bd8eba8674a75a3563d.zip | |
updated with comparison
Diffstat (limited to 'challenge-182/james-smith')
| -rw-r--r-- | challenge-182/james-smith/perl/ch-1.pl | 24 |
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; } |
