mirror of
https://github.com/cubixle/codekata-golang.git
synced 2026-04-24 19:54:43 +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