package main
import (
"fmt"
)
func Find(set []int, target int) bool {
ln := len(set)
if ln == 1 {
return false
}
for i := 0; i < ln; i++ {
fe := set[0] // first element
ce := set[i] // current element
le := set[ln-1] // last element
cle := set[ln-(i+1)] // current last element
// first + current only if i != 0
if fe+ce == target && i != 0 {
fmt.Printf("ITERATION: %d\t%d+%d=%d\t", i, fe, ce, target)
return true
} else if fe+le == target { // fe != le if array size > 1
fmt.Printf("ITERATION: %d\t%d+%d=%d\t", i, fe, le, target)
return true
} else if ce+le == target && i != ln-1 {
fmt.Printf("ITERATION: %d\t%d+%d=%d\t", i, ce, le, target)
return true
} else if ce+cle == target && i != ln-(i+1) {
fmt.Printf("ITERATION: %d\t%d+%d=%d\t", i, ce, cle, target)
return true
}
}
return false
}
func DoTest(set []int, target int, pairExists bool) {
r := Find(set, target)
if r == true {
fmt.Println("PASS")
} else {
if pairExists {
fmt.Printf("%v %d\tFAIL\n", set, target)
}
fmt.Printf("%v %d\tPASS - no match possible\n", set, target)
}
}
func main() {
DoTest([]int{2, 2, 4, 6}, 8, true)
DoTest([]int{1, 2, 4, 4}, 8, true)
DoTest([]int{1, 2, 4, 5}, 9, true)
DoTest([]int{2, 2, 8, 5}, 10, true)
DoTest([]int{-5, 2, 10, 11}, 5, true)
DoTest([]int{-1, -2, 10, 11}, 8, true)
DoTest([]int{-1, -1, 10, 11}, 8, false)
DoTest([]int{-10, -7, -2, 3, 4, 11, 21, 22, 33, 42}, 40, true)
}