aboutsummaryrefslogtreecommitdiff
path: root/challenge-245/dave-jacoby/perl/ch-1.pl
blob: 956f70f4ca54767f9f451ccdbde2c3b6867b79a2 (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
#!/usr/bin/env perl

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

my @examples = (

    {
        lang       => [ 'perl', 'c', 'python' ],
        popularity => [ 2,      1,   3 ],
    },
    {
        lang       => [ 'c++', 'haskell', 'java' ],
        popularity => [ 1,     3,         2 ],
    },
);

for my $e (@examples) {
    my @output     = sort_language($e);
    my $output     = join ', ', map { qq{'$_'} } @output;
    my $lang       = join ', ', map { qq{'$_'} } $e->{lang}->@*;
    my $popularity = join ', ', $e->{popularity}->@*;

    say <<~"END";
    Input:  \@lang = ($lang)
            \@popularity = ($popularity)
    Output: ($output)
    END
}

sub sort_language ($input) {
    return map { $_->[1] }
        sort { $a->[0] <=> $b->[0] }
        map  { [ $input->{popularity}->[$_], $input->{lang}->[$_] ] }
        0 .. -1 + scalar $input->{lang}->@*;
}