#!/usr/bin/env perl
use strict;
use warnings;
use constant {
INPUT => 0,
TARGET => 1,
EXPECTED => 2,
};
use Test::More;
my @tests = (
[[2,7,11,15], 9, [0,1]],
[[2,7,11,15], 9, [1,0]],
[[3,2,4], 6, [1,2]],
[[3,2,4], 6, [2,1]],
[[3,3], 6, [0,1]],
[[3,3], 6, [1,0]],
[[-5,-3,1,4,7], 1, [1,3]],
[[-5,-3,1,4,7], 1, [3,1]],
[[1,-1], 0, [0,1]],
[[1,-1], 0, [1,0]],
);
plan tests => 0+@tests;
for my $test (@tests) {
is_deeply
sort_arrayref(two_sum($test->[INPUT], $test->[TARGET])),
sort_arrayref($test->[EXPECTED]);
}
sub two_sum {
my ($input, $target) = @_;
my $got;
OUTER:
for my $i (0 .. $#$input - 1) {
for my $j ($i + 1 .. $#$input) {
if ($input->[$i] + $input->[$j] == $target) {
$got = [$i, $j];
last OUTER;
}
}
}
return $got;
}
sub sort_arrayref {
my ($aref) = @_;
return [ sort { $a <=> $b } @$aref ];
}
####
1..8
ok 1
ok 2
ok 3
ok 4
ok 5
ok 6
ok 7
ok 8
ok 9
ok 10
####
#!/usr/bin/env perl
use strict;
use warnings;
use constant {
INPUT => 0,
TARGET => 1,
EXPECTED => 2,
};
use Test::More;
my @tests = (
[[2,7,11,15], 9, [0, 1]],
[[3,2,4], 6, [1,2]],
[[3,3], 6, [0,1]],
);
plan tests => 0+@tests;
for my $test (@tests) {
is_deeply
two_sum($test->[INPUT], $test->[TARGET]),
$test->[EXPECTED];
}
sub two_sum {
my ($input, $target) = @_;
my $got;
OUTER:
for my $i (0 .. $#$input - 1) {
next OUTER if $input->[$i] > $target;
INNER:
for my $j ($i + 1 .. $#$input) {
next INNER if $input->[$j] > $target;
if ($input->[$i] + $input->[$j] == $target) {
$got = [$i, $j];
last OUTER;
}
}
}
return $got;
}
####
1..3
ok 1
ok 2
ok 3