関数(とその他の数学とコンピュータに関する予備知識) 入門 関数の定義、引数、戻り値、型
行列プログラマー (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]
%