Quick actions

cmd+k|ctrl+k

Navigation

Languages

summed pairs target match

Snippet info

Language

Go

Visibility

public

Author

xealgo

Created

2017-05-10T23:56:51Z

Updated

2017-05-11T00:14:29Z

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)
}
INFO