#!/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; }