You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
1.2 KiB
67 lines
1.2 KiB
package helper |
|
|
|
import ( |
|
"errors" |
|
"io/ioutil" |
|
"sort" |
|
"strconv" |
|
"strings" |
|
) |
|
|
|
func GetInput(filename string) ([]string, error) { |
|
content, err := ioutil.ReadFile(filename) |
|
if err != nil { |
|
return nil, err |
|
} |
|
lines := strings.Split(string(content), "\n") |
|
return lines, err |
|
} |
|
|
|
func GetFile(filename string) (string, error) { |
|
content, err := ioutil.ReadFile(filename) |
|
if err != nil { |
|
return "", err |
|
} |
|
return string(content), err |
|
} |
|
|
|
func MapToNumber(strings []string) ([]int, error) { |
|
var numbers []int |
|
for _, line := range strings { |
|
number, err := strconv.Atoi(line) |
|
if err != nil { |
|
return numbers, err |
|
} |
|
numbers = append(numbers, number) |
|
} |
|
return numbers, nil |
|
} |
|
|
|
func FindAddendsForSum (possibleAddends []int, sum int) (int, int, error) { |
|
var array = make([]int,len(possibleAddends)) |
|
copy(array,possibleAddends) |
|
sort.Ints(array) |
|
p1 := 0 |
|
p2 := len(array) - 1 |
|
for p1 < p2 { |
|
if array[p1]+array[p2] < sum { |
|
p1++ |
|
} |
|
if array[p1]+array[p2] > sum { |
|
p2-- |
|
} |
|
if array[p1]+array[p2] == sum { |
|
return array[p1] , array[p2], nil |
|
} |
|
} |
|
return 0,0,errors.New("No fitting Addends found") |
|
} |
|
|
|
func SliceIndex(limit int, predicate func(i int) bool) int { |
|
for i := 0; i < limit; i++ { |
|
if predicate(i) { |
|
return i |
|
} |
|
} |
|
return -1 |
|
} |