関数(とその他の数学とコンピュータに関する予備知識) 入門 スライスのスライス、入れ子、forループ、range
行列プログラマー (Philip N. Klein(著)、松田 晃一(翻訳)、弓林 司(翻訳)、脇本 佑紀(翻訳)、中田 洋(翻訳)、齋藤 大吾(翻訳)、オライリー・ジャパン)の0章(関数(とその他の数学とコンピュータに関する予備知識))、0.8(問題)の問題0.8.1、0.8.2、0.8.3の解答をPythonではなくGoで求めてみる。
コード
package main
import "fmt"
func sliceSum(s1, s2 [][]int) [][]int {
s := [][]int{}
for i, ns := range s1 {
ms := s2[i]
t := []int{}
for j, n := range ns {
t = append(t, n+ms[j])
}
s = append(s, t)
}
return s
}
func invMap(m map[string]string) map[string]string {
out := map[string]string{}
for k, v := range m {
out[v] = k
}
return out
}
func row(p, n int) []int {
s := []int{}
for i := 0; i < n; i++ {
s = append(s, p+i)
}
return s
}
func main() {
fmt.Println("問題 0.8.1")
fmt.Println(
sliceSum([][]int{[]int{1, 2}, []int{10, 20}},
[][]int{[]int{3, 4}, []int{30, 40}}))
fmt.Println("問題 0.8.2")
fmt.Println(
invMap(map[string]string{"thank you": "merci", "goodbye": "au revoir"}))
fmt.Println("問題0.8.3")
fmt.Println(row(10, 4))
ss := [][]int{}
for i := 0; i < 15; i++ {
ss = append(ss, row(i, 20))
}
for _, s := range ss {
fmt.Println(s)
}
ss = [][]int{}
for i := 0; i < 15; i++ {
s := []int{}
for j := 0; j < 20; j++ {
s = append(s, i+j)
}
ss = append(ss, s)
}
for _, s := range ss {
fmt.Println(s)
}
}
入出力結果
% go run main.go
[問題 0.8.1
[[4 6] [40 60]]
問題 0.8.2
map[au revoir:goodbye merci:thank you]
問題0.8.3
[10 11 12 13]
[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]
[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20]
[2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21]
[3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22]
[4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
[5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24]
[6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25]
[7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26]
[8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27]
[9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28]
[10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29]
[11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30]
[12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31]
[13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32]
[14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33]
kamimura@iMac sample8.1 % go run main.go
問題 0.8.1
[[4 6] [40 60]]
問題 0.8.2
map[au revoir:goodbye merci:thank you]
問題0.8.3
[10 11 12 13]
[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]
[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20]
[2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21]
[3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22]
[4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
[5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24]
[6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25]
[7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26]
[8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27]
[9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28]
[10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29]
[11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30]
[12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31]
[13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32]
[14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33]
[0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19]
[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20]
[2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21]
[3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22]
[4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]
[5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24]
[6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25]
[7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26]
[8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27]
[9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28]
[10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29]
[11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30]
[12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31]
[13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32]
[14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33]
%