133 lines
2.4 KiB
Go
133 lines
2.4 KiB
Go
package helper
|
|
|
|
import (
|
|
"errors"
|
|
"io/ioutil"
|
|
"sort"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
type convert func(int) string
|
|
|
|
func GetInput(filename string) ([]string, error) {
|
|
content, err := ioutil.ReadFile(filename)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
lines := strings.Split(string(content), "\r\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(numberStrings []string) ([]int, error) {
|
|
var numbers []int
|
|
for _, numberString := range numberStrings {
|
|
trimmedNumberString := strings.TrimSpace(numberString)
|
|
number, err := strconv.Atoi(trimmedNumberString)
|
|
if err != nil {
|
|
return numbers, err
|
|
}
|
|
numbers = append(numbers, number)
|
|
}
|
|
return numbers, nil
|
|
}
|
|
|
|
func RunesToNumber(runes []rune) []int {
|
|
var numbers []int
|
|
for _, r := range runes {
|
|
number := int(r - '0')
|
|
numbers = append(numbers, number)
|
|
}
|
|
return numbers
|
|
}
|
|
|
|
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
|
|
}
|
|
|
|
func DeleteAt(a []int, i int) []int {
|
|
return append(a[:i], a[i+1:]...)
|
|
}
|
|
|
|
func Equal(a, b []int) bool {
|
|
if len(a) != len(b) {
|
|
return false
|
|
}
|
|
for i, v := range a {
|
|
if v != b[i] {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
func Contains(elem int, array []int) bool {
|
|
for _, val := range array {
|
|
if val == elem {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func AddNummbers(numbers ...int) int {
|
|
result := 0
|
|
for _, number := range numbers {
|
|
result += number
|
|
}
|
|
return result
|
|
}
|
|
|
|
func Transpose(in [][]int) [][]int {
|
|
out := make([][]int, len(in[0]))
|
|
for i := 0; i < len(in); i += 1 {
|
|
for j := 0; j < len(in[0]); j += 1 {
|
|
out[j] = append(out[j], in[i][j])
|
|
}
|
|
}
|
|
return out
|
|
}
|
|
|
|
func Delete (stringArray []string, selector string) []string {
|
|
var returnString []string
|
|
for _, str := range stringArray {
|
|
if str != selector {
|
|
returnString = append(returnString, str)
|
|
}
|
|
}
|
|
return returnString
|
|
}
|