1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
#!/usr/local/bin/perl
use strict;
use warnings;
use feature qw(say);
use Test::More;
my @TESTS = (
[ [qw(Perl Raku Love)], [qw(Raku Perl Hate)], 'Perl Raku' ],
[ [qw(A B C)], [qw(D E F) ], '' ],
[ [qw(A B C)], [qw(C A B) ], 'A' ],
[ [qw(A B C D E F)], [qw(A B C) ], 'A' ],
[ [qw(A B C)], [qw(D E F G H C) ], 'C' ],
[ ['A'..'Z'], [reverse('A'..'Z')], "@{[ 'A'..'Z' ]}" ],
[ ['A'..'Z'], ['A'..'Z'], 'A' ],
[ ['A'..'Z'], ['a'..'z'], '' ],
);
is( min_index_sum( @{$_->[0]} ), $_->[1] ) for @TESTS;
done_testing();
sub min_index_sum {
my( $b, %x, $t, $s, @best ) = ( 1e99, #0
map { $_[0][$_] => $_ } reverse ( 0 .. $#{$_[0]} ) #1
);
exists $x{$t = $_[1][$_]} && #3
( $b > ($s=$x{$t}+$_) ? ($b,@best) = ( $s,$t ) #4
: $b == $s && push @best, $t ) #5
for 0 .. $#{$_[1]}; #2
\@best #6
}
|