計算機科学のブログ

関数(とその他の数学とコンピュータに関する予備知識) 入門 関数の定義、引数、戻り値、型

行列プログラマー (Philip N. Klein(著)、松田 晃一(翻訳)、弓林 司(翻訳)、脇本 佑紀(翻訳)、中田 洋(翻訳)、齋藤 大吾(翻訳)、オライリー・ジャパン)の0章(関数(とその他の数学とコンピュータに関する予備知識))、0.5(ラボ: Python入門 - 集合、リスト、辞書、内包表記)、0.5.9(一行プロシージャを定義する)の課題0.5.27、0.5.28、0.5.29、0.5.30、0.5.31、0.5.32の解答をPythonではなくGoで求めてみる。

コード

package main

import "fmt"

func twice(z int) int {
	return 2 * z
}
func nextInts(ns []int) []int {
	t := []int{}
	for _, n := range ns {
		t = append(t, n+1)
	}
	return t
}
func cube(iSlice []int) []int {
	t := []int{}
	for _, n := range iSlice {
		m := 1
		for i := 0; i < 3; i++ {
			m *= n
		}
		t = append(t, m)
	}
	return t
}
func mapToSlice(m map[string]string,
	keySlice []string) []string {
	t := []string{}
	for _, k := range keySlice {
		t = append(t, m[k])
	}
	return t
}
func sliceToMap(strSlice, keyStrSlice []string) map[string]string {
	m := map[string]string{}
	for i, v := range strSlice {
		m[keyStrSlice[i]] = v
	}
	return m
}
func intPow(a, b int) int {
	t := 1
	for i := 0; i < b; i++ {
		t *= a
	}
	return t
}

type intSet map[int]bool

func allThreeDigitNumbers(base int) intSet {
	s := intSet(map[int]bool{})
	for i := 0; i < intPow(base, 3); i++ {
		s[i] = true
	}
	return s
}
func main() {
	fmt.Println("課題0.5.27")
	for z := 0; z < 10; z++ {
		fmt.Printf("twice(%v) = %v\n", z, twice(z))
	}
	fmt.Println("課題0.5.28")
	fmt.Println(nextInts([]int{1, 5, 7}))
	fmt.Println("課題0.5.29")
	fmt.Println(cube([]int{1, 2, 3}))
	fmt.Println("課題0.5.30")
	fmt.Println(
		mapToSlice(
			map[string]string{"a": "A", "b": "B", "c": "C"},
			[]string{"b", "c", "a"}))
	fmt.Println("課題0.5.31")
	fmt.Println(sliceToMap([]string{"A", "B", "C"}, []string{"a", "b", "c"}))
	fmt.Println("課題0.5.32")
	for _, base := range []int{2, 3} {
		fmt.Println(allThreeDigitNumbers(base))
	}
}

入出力結果

% go run ./main.go 
課題0.5.27
twice(0) = 0
twice(1) = 2
twice(2) = 4
twice(3) = 6
twice(4) = 8
twice(5) = 10
twice(6) = 12
twice(7) = 14
twice(8) = 16
twice(9) = 18
課題0.5.28
[2 6 8]
課題0.5.29
[1 8 27]
課題0.5.30
[B C A]
課題0.5.31
map[a:A b:B c:C]
課題0.5.32
map[0:true 1:true 2:true 3:true 4:true 5:true 6:true 7:true]
map[0:true 1:true 2:true 3:true 4:true 5:true 6:true 7:true 8:true 9:true 10:true 11:true 12:true 13:true 14:true 15:true 16:true 17:true 18:true 19:true 20:true 21:true 22:true 23:true 24:true 25:true 26:true]
%