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
41
42
43
44
45
46
47
48
49
|
#!/usr/bin/env perl
use v5.36;
use strict;
use warnings;
use experimental qw(switch);
use List::Util qw( uniq );
sub last_member (@numbers) {
return 0 unless @numbers;
return $numbers[0] if @numbers == 1;
my @sorted_numbers = sort { $a < $b } @numbers;
$sorted_numbers[0] == $sorted_numbers[1]
? last_member( @sorted_numbers[ 2 .. -1 ] )
: last_member( @sorted_numbers[ 2 .. -1 ],
$sorted_numbers[0] - $sorted_numbers[1] );
}
sub last_member2 (@numbers) {
given ( scalar @numbers ) {
when ( $_ == 0 ) { return 0 }
when ( $_ == 1 ) { return $numbers[0] }
default {
my @sorted_numbers = sort { $a < $b } @numbers;
return $sorted_numbers[0] == $sorted_numbers[1]
? last_member( @sorted_numbers[ 2 .. -1 ] )
: last_member( @sorted_numbers[ 2 .. -1 ],
$sorted_numbers[0] - $sorted_numbers[1] );
}
}
}
#| Run test cases
sub MAIN() {
use Test2::V0 qw( is plan );
plan 6;
is last_member( 2, 7, 4, 1, 8, 1 ), 1, 'works for (2, 7, 4, 1, 8, 1)';
is last_member(1), 1, 'works for (1)';
is last_member( 1, 1 ), 0, 'works for (1, 1)';
is last_member2( 2, 7, 4, 1, 8, 1 ), 1, 'works for (2, 7, 4, 1, 8, 1)';
is last_member2(1), 1, 'works for (1)';
is last_member2( 1, 1 ), 0, 'works for (1, 1)';
}
MAIN();
|