計算機科学のブログ

関数(とその他の数学とコンピュータに関する予備知識) 入門 スライスのスライス、入れ子、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]
%