package helper import ( "constraints" "fmt" "os" "strings" "time" ) func check(e error) { if e != nil { panic(e) } } func RemoveError[T any](value T, e error) T { check(e) return value } func ReadTextFile(filePath string) []string { file, err := os.ReadFile(filePath) check(err) return strings.Split(string(file), "\r\n") } func GetKeysOfSetMap[T int | string](inputMap map[T]bool) []T { keys := make([]T, len(inputMap)) i := 0 for k := range inputMap { keys[i] = k i++ } return keys } func MeasureTime(process string) func() { fmt.Printf("Start %s\n", process) start := time.Now() return func() { fmt.Printf("Time taken by %s is %v\n", process, time.Since(start).Nanoseconds()) } } func FindRepeatedItems[T int | int64](itemgroup1, itemgroup2 []T) []T { elementsCompartment1 := map[T]bool{} repeatedElemnts := map[T]bool{} for _, item := range itemgroup1 { elementsCompartment1[item] = true } for _, item := range itemgroup2 { if elementsCompartment1[item] { repeatedElemnts[item] = true } } v := make([]T, 0, len(repeatedElemnts)) for key, _ := range repeatedElemnts { v = append(v, key) } return v } func FindMax[T int | int64](slice []T) (m T) { for i, e := range slice { if i == 0 || e > m { m = e } } return } func Sum[T int | int64](slice []T) (s T) { for _, e := range slice { s += e } return } func Contains2Int[T [2]int](elems []T, v T) bool { for _, s := range elems { if v == s { return true } } return false } func Contains[T constraints.Ordered](elems []T, v T) bool { for _, s := range elems { if v == s { return true } } return false }