aboutsummaryrefslogtreecommitdiff
path: root/challenge-208/dave-jacoby/perl/ch-1.pl
blob: d977f9ccf691bddd7f0f58ccfd84ba1850d5f763 (plain)
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
33
34
35
36
37
38
39
40
#!/usr/bin/env perl

use strict;
use warnings;
use experimental qw{ say postderef signatures state };

use List::Util qw{ min };

my @examples = (

    [ [qw{ Perl Raku Love}], [qw{Raku Perl Hate}], ],
    [ [qw{A B C}],           [qw{D E F}], ],
    [ [qw{A B C}],           [qw{C A B}], ],
);

for my $e (@examples) {
    my @o = min_index_sum( $e->@* );
    my $o = join ',',map { qq{"$_"} } @o;
    my $list1 = join ',',map { qq{"$_"} } $e->[0]->@*;
    my $list2 = join ',',map { qq{"$_"} } $e->[1]->@*;
    say <<"END";
    Input:  \@list1 = $list1
            \@list2 = $list2
    Output: ($o)
END
}

sub min_index_sum ( $list1, $list2 ) {
    my %output;
    for my $i ( 0 .. -1 + scalar $list1->@* ) {
        for my $j ( 0 .. -1 + scalar $list2->@* ) {
            next unless $list1->[$i] eq $list2->[$j];
            my $k = $i + $j;
            push $output{$k}->@*, $list1->[$i];
        }
    }
    my $min = min keys %output;
    return $output{$min}->@* if $min;
    return ();
}