2021-12-01 22:49:48 +01:00
package helper
import (
"errors"
"io/ioutil"
"sort"
"strconv"
"strings"
)
2021-12-03 14:02:20 +01:00
type convert func ( int ) string
2021-12-01 22:49:48 +01:00
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 ( 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
}
2021-12-03 14:02:20 +01:00
func RunesToNumber ( runes [ ] rune ) [ ] int {
var numbers [ ] int
for _ , r := range runes {
number := int ( r - '0' )
numbers = append ( numbers , number )
}
return numbers
}
2021-12-01 22:49:48 +01:00
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
}
2021-12-03 14:02:20 +01:00
func DeleteAt ( a [ ] int , i int ) [ ] int {
2021-12-01 22:49:48 +01:00
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
}
2021-12-03 14:02:20 +01:00
func Contains ( elem int , array [ ] int ) bool {
for _ , val := range array {
if val == elem {
2021-12-01 22:49:48 +01:00
return true
}
}
return false
}
func AddNummbers ( numbers ... int ) int {
result := 0
for _ , number := range numbers {
result += number
}
return result
}
2021-12-03 14:02:20 +01:00
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
}