package main import ( "slices" "unicode" ) func dotCharacters() []rune { // Returns all possible characters represented by the dot metacharacter start := 0x0020 end := 0x007E to_return := make([]rune, (end-start)+1) for i := start; i <= end; i++ { to_return = append(to_return, rune(i)) } return to_return } func isAlphaNum(c rune) bool { return unicode.IsLetter(c) || unicode.IsNumber(c) } func assert(cond bool) { if cond != true { panic("Assertion Failed") } } // Ensure that the given elements are only appended to the given slice if they // don't already exist. Returns the new slice, and the number of unique items appended. func unique_append[T comparable](slc []T, items ...T) ([]T, int) { num_appended := 0 for _, item := range items { if !slices.Contains(slc, item) { slc = append(slc, item) num_appended++ } } return slc, num_appended } // Returns true only if all the given elements are equal func allEqual[T comparable](items ...T) bool { first := items[0] for _, item := range items { if item != first { return false } } return true }