-
Notifications
You must be signed in to change notification settings - Fork 6
/
toefl.go
65 lines (54 loc) · 1.11 KB
/
toefl.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package main
import (
"bytes"
"fmt"
"math/rand"
"strings"
"time"
"unicode"
)
func main() {
word := random()
fmt.Println(word)
}
type word struct {
spelling string
meanings []string
}
func (w word) String() string {
var buf bytes.Buffer
buf.WriteString(w.spelling)
buf.WriteRune('\n')
for _, meaning := range w.meanings {
buf.WriteRune('\n')
buf.WriteString(meaning)
}
return buf.String()
}
func random() word {
words := load("words/wangyumei-toefl-words.txt")
rand.Seed(time.Now().UnixNano())
idx := rand.Intn(len(words))
return words[idx]
}
func load(path string) (words []word) {
asset := MustAsset(path)
for _, line := range strings.Split(string(asset), "\n") {
line = strings.TrimFunc(line, unicode.IsSpace)
if line == "" {
continue
}
words = append(words, parse(line))
}
return
}
func parse(raw string) word {
parts := strings.Split(raw, "#")
spelling := parts[0]
var meanings []string
for _, meaning := range strings.Split(parts[1], ";") {
meaning := strings.TrimFunc(meaning, unicode.IsSpace)
meanings = append(meanings, meaning)
}
return word{spelling, meanings}
}