aboutsummaryrefslogtreecommitdiff
path: root/challenge-327/e-choroba/perl/ch-2.pl
blob: fb1656835f6d12e1c728635ae8b096569342cc0f (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
#!/usr/bin/perl
use warnings;
use strict;
use experimental qw( signatures );

sub mad(@ints) {
    my @sorted = sort { $a <=> $b } @ints;
    my @mad = ($sorted[1] - $sorted[0]);
    for my $i (1 .. $#sorted) {
        my $diff = abs($sorted[$i] - $sorted[ $i - 1 ]);
        if ($diff < $mad[0]) {
            @mad = ($diff);
        }
        if ($diff == $mad[0]) {
            push @mad, [@sorted[$i - 1, $i]];
        }
    }
    return @mad[1 .. $#mad]
}

use Test2::V0;
plan(3);

use experimental qw( signatures );  # Needed again after Test2::V0;
sub bagobags(@elements) {
    bag {
        item(bag { item($_) for @$_; end() }) for @elements;
        end();
    }
}

is [mad(4, 1, 2, 3)], bagobags([1,2], [2,3], [3,4]), 'Example 1';
is [mad(1, 3, 7, 11, 15)], bagobags([1,3]), 'Example 2';
is [mad(1, 5, 3, 8)], bagobags([1,3], [3,5]), 'Example 3';