Goで言語処理100本ノック 2020 第1章: 準備運動
Goで「言語処理100本ノック 2020 第1章: 準備運動」を解いた記録
第1章: 準備運動 - NLP100 202000. 文字列の逆順
package main
import (
"fmt"
)
func main() {
a := []rune("stressed")
fmt.Println(string(a))
b := ""
for i := len(a) - 1; i >= 0; i-- {
b += string(a[i])
}
fmt.Println(b)
}
//stressed
//desserts
The Go Playground
01. 「パタトクカシーー」
package main
import (
"fmt"
)
func main() {
a := []rune("パタトクカシーー")
fmt.Println(string(a))
b := ""
for i := 0; i < len(a); i += 2 {
b += string(a[i])
}
fmt.Println(b)
}
//パタトクカシーー
//パトカー
The Go Playground
02. 「パトカー」+「タクシー」=「パタトクカシーー」
package main
import (
"fmt"
)
func main() {
a := []rune("パトカー")
b := []rune("タクシー")
fmt.Println(string(a))
fmt.Println(string(b))
c := ""
for i := 0; i < len(a); i++ {
c += string(a[i]) + string(b[i])
}
fmt.Println(c)
}
//パトカー
//タクシー
//パタトクカシーー
The Go Playground
03. 円周率
package main
import (
"fmt"
"strings"
)
func main() {
a := "Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics."
a = strings.Trim(a, ".")
a = strings.Replace(a, ",", "", -1)
b := strings.Split(a, " ")
fmt.Println(string(a))
var c []int
for i := 0; i < len(b); i++ {
c = append(c, len(b[i]))
}
fmt.Println(c)
}
//Now I need a drink alcoholic of course after the heavy lectures involving quantum mechanics
//[3 1 4 1 5 9 2 6 5 3 5 8 9 7 9]
The Go Playground
04. 元素記号
package main
import (
"fmt"
"strings"
)
func main() {
a := "Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can."
a = strings.Replace(a, ".", "", -1)
b := strings.Split(a, " ")
fmt.Println(string(a))
m := map[string]int{}
for i := 0; i < len(b); i++ {
switch i + 1 {
case 1, 5, 6, 7, 8, 9, 15, 16, 19:
m[string([]rune(b[i])[0])] = i
default:
m[string([]rune(b[i])[0:2])] = i
}
}
fmt.Println(m)
}
//Hi He Lied Because Boron Could Not Oxidize Fluorine New Nations Might Also Sign Peace Security Clause Arthur King Can
//map[Al:12 Ar:17 B:4 Be:3 C:5 Ca:19 Cl:16 F:8 H:0 He:1 K:18 Li:2 Mi:11 N:6 Na:10 Ne:9 O:7 P:14 S:15 Si:13]
The Go Playground
05. n-gram
package main
import (
"fmt"
"strings"
)
func ngram(s []string) [][]string {
c := [][]string{}
for i := 0; i < len(s); i++ {
if i+1 < len(s) {
b := []string{s[i], s[i+1]}
c = append(c, b)
}
}
return c
}
func main() {
a := "I am an NLPer"
fmt.Println(a)
b := strings.Split(a, " ")
c := ngram(b)
fmt.Println(c)
d := strings.Split(a, "")
e := ngram(d)
fmt.Println(e)
}
//I am an NLPer
//[[I am] [am an] [an NLPer]]
//[[I ] [ a] [a m] [m ] [ a] [a n] [n ] [ N] [N L] [L P] [P e] [e r]]
The Go Playground
06. 集合
package main
import (
"fmt"
"strings"
)
func ngram(s []string) [][]string {
c := [][]string{}
for i := 0; i < len(s); i++ {
if i+1 < len(s) {
b := []string{s[i], s[i+1]}
c = append(c, b)
}
}
return c
}
func toMap(ss [][]string) map[string][]string {
m := map[string][]string{}
for _, s := range ss {
key := s[0] + s[1]
m[key] = s
}
return m
}
func union(x, y map[string][]string) map[string][]string {
m := map[string][]string{}
for k, v := range x {
m[k] = v
}
for k, v := range y {
m[k] = v
}
return m
}
func intersection(x, y map[string][]string) map[string][]string {
m := map[string][]string{}
for k, v := range x {
if _, ok := y[k]; ok {
m[k] = v
}
}
return m
}
func difference(x, y map[string][]string) map[string][]string {
m := map[string][]string{}
for k, v := range x {
if _, ok := y[k]; !ok {
m[k] = v
}
}
return m
}
func main() {
xstring := "paraparaparadise"
fmt.Println(xstring)
ystring := "paragraph"
fmt.Println(ystring)
xn := ngram(strings.Split(xstring, ""))
fmt.Println(xn)
xmap := toMap(xn)
fmt.Println("X", xmap)
yn := ngram(strings.Split(ystring, ""))
fmt.Println(yn)
ymap := toMap(yn)
fmt.Println("Y", ymap)
fmt.Println("union", union(xmap, ymap))
fmt.Println("intersection", intersection(xmap, ymap))
fmt.Println("difference", difference(xmap, ymap))
fmt.Print("'se' in X ")
_, ok := xmap["se"]
fmt.Println(ok)
fmt.Print("'se' in Y ")
_, ok = ymap["se"]
fmt.Println(ok)
}
//paraparaparadise
//paragraph
//[[p a] [a r] [r a] [a p] [p a] [a r] [r a] [a p] [p a] [a r] [r a] [a d] [d i] [i s] [s e]]
//X map[ad:[a d] ap:[a p] ar:[a r] di:[d i] is:[i s] pa:[p a] ra:[r a] se:[s e]]
//[[p a] [a r] [r a] [a g] [g r] [r a] [a p] [p h]]
//Y map[ag:[a g] ap:[a p] ar:[a r] gr:[g r] pa:[p a] ph:[p h] ra:[r a]]
//union map[ad:[a d] ag:[a g] ap:[a p] ar:[a r] di:[d i] gr:[g r] is:[i s] pa:[p a] ph:[p h] ra:[r a] se:[s e]]
//intersection map[ap:[a p] ar:[a r] pa:[p a] ra:[r a]]
//difference map[ad:[a d] di:[d i] is:[i s] se:[s e]]
//'se' in X true
//'se' in Y false
The Go Playground
参考
go言語のmap、sliceのコピー | Golang | kido Tech Blog
07. テンプレートによる文生成
package main
import (
"fmt"
)
func sentence(x int, y string, z float64) string {
return fmt.Sprintf("%d時の%sは%v", x, y, z)
}
func main() {
s := sentence(12, "気温", 22.4)
fmt.Println(s)
}
//12時の気温は22.4
The Go Playground
08. 暗号文
package main
import (
"fmt"
"unicode"
)
func cipher(s string) string {
res := ""
for _, r := range s {
if unicode.IsLower(r) {
res += string(219 - r)
} else {
res += string(r)
}
}
return res
}
func main() {
s := cipher("Hello, World!!")
fmt.Println(s)
s = cipher(s)
fmt.Println(s)
}
//Hvool, Wliow!!
//Hello, World!!
The Go Playground
参考
- ひらがなかカタカナなのか判定したい #golang - Qiita
- unicode - The Go Programming Language
- String と Rune — プログラミング言語 Go | text.Baldanders.info
09. Typoglycemia
package main
import (
"fmt"
"math/rand"
"strings"
"time"
)
func randomSort(s string) string {
res := []string{}
r := rand.New(rand.NewSource(time.Now().UnixNano()))
for _, v := range strings.Fields(s) {
rv := []rune(v)
if len(rv) > 4 {
pre := string(rv[0])
suf := string(rv[len(rv)-1])
c := ""
for _, p := range r.Perm(len(rv) - 2) {
c += string(rv[p+1])
}
res = append(res, pre+c+suf)
} else {
res = append(res, string(rv))
}
}
return strings.Join(res, " ")
}
func main() {
ex := "I couldn’t believe that I could actually understand what I was reading : the phenomenal power of the human mind ."
s := randomSort(ex)
fmt.Println(ex)
fmt.Println(s)
}
//I couldn’t believe that I could actually understand what I was reading : the phenomenal power of the human mind .
//I cu’dnolt belveie that I could alcaluty unetdansrd what I was rendiag : the pheaeonnml pewor of the huamn mind .
The Go Playground
参考
rand - The Go Programming Language
新規コメント