40 lines
706 B
Go
40 lines
706 B
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
func newSpeller(blocks string) func(string) bool {
|
|
bl := strings.Fields(blocks)
|
|
return func(word string) bool {
|
|
return r(word, bl)
|
|
}
|
|
}
|
|
|
|
func r(word string, bl []string) bool {
|
|
if word == "" {
|
|
return true
|
|
}
|
|
c := word[0] | 32
|
|
for i, b := range bl {
|
|
if c == b[0]|32 || c == b[1]|32 {
|
|
bl[i], bl[0] = bl[0], b
|
|
if r(word[1:], bl[1:]) == true {
|
|
return true
|
|
}
|
|
bl[i], bl[0] = bl[0], bl[i]
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func main() {
|
|
sp := newSpeller(
|
|
"BO XK DQ CP NA GT RE TG QD FS JW HU VI AN OB ER FS LY PC ZM")
|
|
for _, word := range []string{
|
|
"A", "BARK", "BOOK", "TREAT", "COMMON", "SQUAD", "CONFUSE"} {
|
|
fmt.Println(word, sp(word))
|
|
}
|
|
}
|