-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathhaikunator.go
83 lines (64 loc) · 2.48 KB
/
haikunator.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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package haikunator
import (
"fmt"
"math/rand"
"strconv"
"time"
)
var (
adjectives = []string{"autumn", "hidden", "bitter", "misty", "silent", "empty", "dry", "dark", "summer",
"icy", "delicate", "quiet", "white", "cool", "spring", "winter", "patient",
"twilight", "dawn", "crimson", "wispy", "weathered", "blue", "billowing",
"broken", "cold", "damp", "falling", "frosty", "green", "long", "late", "lingering",
"bold", "little", "morning", "muddy", "old", "red", "rough", "still", "small",
"sparkling", "throbbing", "shy", "wandering", "withered", "wild", "black",
"young", "holy", "solitary", "fragrant", "aged", "snowy", "proud", "floral",
"restless", "divine", "polished", "ancient", "purple", "lively", "nameless"}
nouns = []string{"waterfall", "river", "breeze", "moon", "rain", "wind", "sea", "morning",
"snow", "lake", "sunset", "pine", "shadow", "leaf", "dawn", "glitter", "forest",
"hill", "cloud", "meadow", "sun", "glade", "bird", "brook", "butterfly",
"bush", "dew", "dust", "field", "fire", "flower", "firefly", "feather", "grass",
"haze", "mountain", "night", "pond", "darkness", "snowflake", "silence",
"sound", "sky", "shape", "surf", "thunder", "violet", "water", "wildflower",
"wave", "water", "resonance", "sun", "wood", "dream", "cherry", "tree", "fog",
"frost", "voice", "paper", "frog", "smoke", "star"}
)
type Haikunator struct {
r *rand.Rand
delim string
token int64
}
func NewHaikunator() Haikunator {
r := rand.New(rand.NewSource(time.Now().UnixNano()))
h := Haikunator{r: r, delim: "-", token: 9999}
return h
}
func (h *Haikunator) haikunate(token, delim string) string {
haiku := fmt.Sprintf("%s%s%s", adjectives[h.r.Intn(len(adjectives))], delim, nouns[h.r.Intn(len(nouns))])
if len(token) > 0 {
haiku = fmt.Sprintf("%s%s%s", haiku, delim, token)
}
return haiku
}
func (h *Haikunator) Haikunate() string {
tokenString := strconv.FormatInt(h.r.Int63n(h.token), 10)
return h.haikunate(tokenString, h.delim)
}
func (h *Haikunator) TokenHaikunate(token int64) string {
tokenString := ""
if token > 0 {
tokenString = strconv.FormatInt(h.r.Int63n(token), 10)
}
return h.haikunate(tokenString, h.delim)
}
func (h *Haikunator) DelimHaikunate(delim string) string {
tokenString := ""
return h.haikunate(tokenString, delim)
}
func (h *Haikunator) TokenDelimHaikunate(token int64, delim string) string {
tokenString := ""
if token > 0 {
tokenString = strconv.FormatInt(h.r.Int63n(token), 10)
}
return h.haikunate(tokenString, delim)
}