-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathmain.go
55 lines (44 loc) · 1017 Bytes
/
main.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
package main
import (
"bufio"
"bytes"
"encoding/binary"
"flag"
"golang.org/x/text/width"
"math/rand"
"os"
)
// Range of full-width kana characters
const (
KanaLo = 0x30A0
KanaHi = 0x30FF
)
func main() {
kana := flag.Bool("kana", false, "append random full-width kana")
flag.Parse()
outbuffer := bytes.NewBuffer(nil)
var seed int64
runescanner := bufio.NewScanner(os.Stdin)
runescanner.Split(bufio.ScanRunes)
var r []byte
for runescanner.Scan() {
r = runescanner.Bytes()
outbuffer.Write(width.Widen.Bytes(r))
s, _ := binary.Varint(r)
seed ^= s
}
rand.Seed(seed)
if string(r) == "\n" {
outbuffer.Truncate(outbuffer.Len() - 1)
}
if kana != nil && *kana {
for i := rand.Intn(6); i >= 0; i-- {
outbuffer.Write([]byte(string(rune(KanaLo + rand.Intn(KanaHi-KanaLo)))))
}
}
if string(r) == "\n" {
outbuffer.Write([]byte("\n"))
}
outbuffer.WriteTo(os.Stdout)
}
// 🌴🌴🏎 🌇