47 lines
1,006 B
Go
47 lines
1,006 B
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"net/http"
|
|
"sort"
|
|
)
|
|
|
|
func main() {
|
|
r, err := http.Get("http://wiki.puzzlers.org/pub/wordlists/unixdict.txt")
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return
|
|
}
|
|
b, err := ioutil.ReadAll(r.Body)
|
|
r.Body.Close()
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
return
|
|
}
|
|
var ma int
|
|
var bs byteSlice
|
|
m := make(map[string][][]byte)
|
|
for _, word := range bytes.Fields(b) {
|
|
bs = append(bs[:0], byteSlice(word)...)
|
|
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 {
|
|
fmt.Printf("%s\n", a)
|
|
}
|
|
}
|
|
}
|
|
|
|
type byteSlice []byte
|
|
|
|
func (b byteSlice) Len() int { return len(b) }
|
|
func (b byteSlice) Swap(i, j int) { b[i], b[j] = b[j], b[i] }
|
|
func (b byteSlice) Less(i, j int) bool { return b[i] < b[j] }
|