package main import ( "bufio" "os" "slices" "strings" ) type character interface { int | rune } // Returns all elements in slice A that are NOT in slice B func setDifference[T comparable](s1 []T, s2 []T) []T { toReturn := make([]T, 0, len(s1)) for _, val := range s1 { if !slices.Contains(s2, val) { toReturn = append(toReturn, val) } } return toReturn } // Generate numbers in a range - start (inclusive) to end (exclusive) func genRange[T character](start, end T) []T { toRet := make([]T, end-start) for i := start; i < end; i++ { toRet[i-start] = i } return toRet } // Returns whether or not the given file contains a NULL character func fileContainsNullChar(filename string) (bool, error) { file, err := os.Open(filename) if err != nil { return true, err } defer file.Close() scanner := bufio.NewScanner(file) for scanner.Scan() { line := scanner.Text() if strings.Contains(line, "\000") { return true, nil } } if err := scanner.Err(); err != nil { return true, err } return false, nil }