wordsearch/anagram/anagram.go

41 lines
583 B
Go
Raw Normal View History

2023-10-07 17:12:47 +01:00
package anagram
import (
"bufio"
"io"
"sort"
2023-10-08 15:05:12 +01:00
"github.com/ray1729/wordsearch/util"
2023-10-07 17:12:47 +01:00
)
type DB map[string][]string
2023-10-08 14:25:57 +01:00
func New() DB {
return make(DB)
2023-10-08 14:25:57 +01:00
}
func (db DB) Add(s string) {
2023-10-08 14:25:57 +01:00
k := toKey(s)
db[k] = append(db[k], s)
2023-10-07 17:12:47 +01:00
}
func toKey(s string) string {
xs := util.LowerCaseAlpha(s)
sort.Slice(xs, func(i, j int) bool { return xs[i] < xs[j] })
return string(xs)
}
func Load(r io.Reader) (DB, error) {
2023-10-08 14:25:57 +01:00
db := New()
2023-10-07 17:12:47 +01:00
sc := bufio.NewScanner(r)
for sc.Scan() {
2023-10-08 14:25:57 +01:00
db.Add(sc.Text())
2023-10-07 17:12:47 +01:00
}
return db, sc.Err()
2023-10-07 17:12:47 +01:00
}
func (d DB) FindAnagrams(s string) []string {
2023-10-07 17:12:47 +01:00
return d[toKey(s)]
}