RosettaCodeData/Task/Anagrams/Go/anagrams-1.go

47 lines
1,006 B
Go
Raw Permalink Normal View History

2013-04-10 12:38:42 -07:00
package main
import (
2014-01-17 05:32:22 +00:00
"bytes"
2013-04-10 12:38:42 -07:00
"fmt"
"io/ioutil"
2014-01-17 05:32:22 +00:00
"net/http"
2013-04-10 12:38:42 -07:00
"sort"
)
func main() {
2020-02-17 23:21:07 -08:00
r, err := http.Get("http://wiki.puzzlers.org/pub/wordlists/unixdict.txt")
2014-01-17 05:32:22 +00:00
if err != nil {
fmt.Println(err)
return
}
b, err := ioutil.ReadAll(r.Body)
r.Body.Close()
2013-04-10 12:38:42 -07:00
if err != nil {
fmt.Println(err)
return
}
var ma int
2014-01-17 05:32:22 +00:00
var bs byteSlice
m := make(map[string][][]byte)
for _, word := range bytes.Fields(b) {
bs = append(bs[:0], byteSlice(word)...)
2013-04-10 12:38:42 -07:00
sort.Sort(bs)
k := string(bs)
a := append(m[k], word)
if len(a) > ma {
ma = len(a)
}
m[k] = a
}
for _, a := range m {
if len(a) == ma {
2014-01-17 05:32:22 +00:00
fmt.Printf("%s\n", a)
2013-04-10 12:38:42 -07:00
}
}
}
type byteSlice []byte
2014-01-17 05:32:22 +00:00
func (b byteSlice) Len() int { return len(b) }
func (b byteSlice) Swap(i, j int) { b[i], b[j] = b[j], b[i] }
2013-04-10 12:38:42 -07:00
func (b byteSlice) Less(i, j int) bool { return b[i] < b[j] }