関数(とその他の数学とコンピュータに関する予備知識) 入門 繰り返し処理について スライス、map、長さ、forとrange
行列プログラマー (Philip N. Klein(著)、松田 晃一(翻訳)、弓林 司(翻訳)、脇本 佑紀(翻訳)、中田 洋(翻訳)、齋藤 大吾(翻訳)、オライリー・ジャパン)の0章(関数(とその他の数学とコンピュータに関する予備知識))、0.5(ラボ: Python入門 - 集合、リスト、辞書、内包表記)、課題0.5.17、0.5.7(その他の繰り返し処理について)の課題0.5.18、0.5.19、0.5.20の解答をPythonではなくGoで求めてみる。
コード
package main
import "fmt"
// IntegerSet ...
type IntegerSet map[int]bool
// NewIntegerSet ...
func NewIntegerSet(ns []int) IntegerSet {
t := map[int]bool{}
for _, n := range ns {
t[n] = true
}
return IntegerSet(t)
}
func main() {
fmt.Println("課題0.5.17")
nums := []int{1, 1}
numSet := NewIntegerSet(nums)
fmt.Println(len(nums), len(numSet))
fmt.Println("課題0.5.18")
nums = []int{}
for i := 0; i < 100; i++ {
if i%2 == 1 {
nums = append(nums, i)
}
}
fmt.Println(nums)
fmt.Println("課題0.5.19")
s := "ABCDE"
type numString struct {
num int
s string
}
ns := []numString{}
for i, c := range s {
ns = append(ns, numString{i, string(c)})
}
fmt.Println(ns)
fmt.Println("課題0.5.20")
nums1 := []int{10, 25, 40}
nums2 := []int{1, 15, 20}
nums = []int{}
for i, n := range nums1 {
nums = append(nums, n+nums2[i])
}
fmt.Println(nums)
}
入出力結果
% go run main.go
課題0.5.17
2 1
課題0.5.18
[1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99]
課題0.5.19
[{0 A} {1 B} {2 C} {3 D} {4 E}]
課題0.5.20
[11 40 60]
%