mirror of
https://github.com/cubixle/codekata-golang.git
synced 2026-04-24 18:44:44 +01:00
20201105: find target
This commit is contained in:
56
20201105_find_target/main.go
Normal file
56
20201105_find_target/main.go
Normal file
@@ -0,0 +1,56 @@
|
||||
package main
|
||||
|
||||
import "fmt"
|
||||
|
||||
var nums = []int{1, 2, 7, 9, 13, 57, 36, 26, 55, 11, 6, 3, 89, 36, 75, 36, 76, 95, 98, 101, 320, 520, 85, 36, 62, 49, 96, 1}
|
||||
|
||||
func main() {
|
||||
fmt.Println("num=", findTargetInNums(35, nums))
|
||||
fmt.Println(findTargetInNums2(35, nums))
|
||||
}
|
||||
|
||||
func findTargetInNums(target int, nums []int) []int {
|
||||
for x, i := range nums {
|
||||
if i >= target {
|
||||
continue
|
||||
}
|
||||
for y, j := range nums {
|
||||
if i == j {
|
||||
continue
|
||||
}
|
||||
if i+j == target {
|
||||
return []int{x, y}
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func findTargetInNums2(target int, nums []int) []ret {
|
||||
var r []ret
|
||||
for x, i := range nums {
|
||||
if i >= target {
|
||||
continue
|
||||
}
|
||||
for y, j := range nums {
|
||||
if i == j {
|
||||
continue
|
||||
}
|
||||
if i+j == target {
|
||||
r = append(r, ret{i, x})
|
||||
r = append(r, ret{j, y})
|
||||
return r
|
||||
}
|
||||
}
|
||||
}
|
||||
return r
|
||||
}
|
||||
|
||||
type ret struct {
|
||||
num int
|
||||
subscript int
|
||||
}
|
||||
|
||||
func (r ret) String() string {
|
||||
return fmt.Sprintf("num=%d-sub=%d", r.num, r.subscript)
|
||||
}
|
||||
56
20201105_find_target/main_test.go
Normal file
56
20201105_find_target/main_test.go
Normal file
@@ -0,0 +1,56 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func Test_findTargetInNums(t *testing.T) {
|
||||
type args struct {
|
||||
target int
|
||||
nums []int
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
args args
|
||||
want []int
|
||||
}{
|
||||
{
|
||||
"3_in_1_2",
|
||||
args{3, []int{1, 2}},
|
||||
[]int{0, 1},
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
if got := findTargetInNums(tt.args.target, tt.args.nums); !reflect.DeepEqual(got, tt.want) {
|
||||
t.Errorf("findTargetInNums() = %v, want %v", got, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func Test_findTargetInNums2(t *testing.T) {
|
||||
type args struct {
|
||||
target int
|
||||
nums []int
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
args args
|
||||
want []ret
|
||||
}{
|
||||
{
|
||||
"3_in_1_2",
|
||||
args{3, []int{1, 2}},
|
||||
[]ret{{1, 0}, {2, 1}},
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
if got := findTargetInNums2(tt.args.target, tt.args.nums); !reflect.DeepEqual(got, tt.want) {
|
||||
t.Errorf("findTargetInNums2() = %v, want %v", got, tt.want)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user