関数(とその他の数学とコンピュータに関する予備知識) 入門 集合 mapで代用、共通部分、forループ、range
行列プログラマー (Philip N. Klein(著)、松田 晃一(翻訳)、弓林 司(翻訳)、脇本 佑紀(翻訳)、中田 洋(翻訳)、齋藤 大吾(翻訳)、オライリー・ジャパン)の0章(関数(とその他の数学とコンピュータに関する予備知識))、0.5(ラボ: Python入門 - 集合、リスト、辞書、内包表記)、0.5.4(集合)の課題0.5.5、0.5.6、0.5.7、0.5.8、0.5.9の解答をPythonではなくGoで求めてみる。
コード
package main
import (
"fmt"
"math"
)
// IntegerSet ...
type IntegerSet map[int]bool
// NewIntegerSet ...
func NewIntegerSet(nums []int) IntegerSet {
numSet := IntegerSet(map[int]bool{})
for _, num := range nums {
numSet[num] = true
}
return numSet
}
// NewEmptyIntegerSet ...
func NewEmptyIntegerSet() IntegerSet {
return IntegerSet(map[int]bool{})
}
func main() {
fmt.Println("課題0.5.5")
nums := NewIntegerSet([]int{1, 2, 3, 4, 5})
fmt.Println(nums)
squareNums := NewEmptyIntegerSet()
for num := range nums {
squareNums[num*num] = true
}
fmt.Println(nums)
fmt.Println(squareNums)
fmt.Println("課題0.5.6")
nums = NewIntegerSet([]int{0, 1, 2, 3, 4})
power2nums := NewEmptyIntegerSet()
for num := range nums {
power2nums[int(math.Pow(2, float64(num)))] = true
}
fmt.Println(power2nums)
fmt.Println("課題0.5.7")
nums = NewEmptyIntegerSet()
nums1 := NewIntegerSet([]int{1, 2, 3})
nums2 := NewIntegerSet([]int{2, 3, 4})
for num1 := range nums1 {
for num2 := range nums2 {
nums[num1*num2] = true
}
}
fmt.Println(nums)
fmt.Println("課題0.5.8")
nums = NewEmptyIntegerSet()
nums1 = NewIntegerSet([]int{1, 3, 5})
nums2 = NewIntegerSet([]int{2, 4, 6})
for num1 := range nums1 {
for num2 := range nums2 {
if num1*num2 < 18 {
nums[num1*num2] = true
}
}
}
fmt.Println(nums)
fmt.Println(len(nums))
fmt.Println("課題0.5.9")
s := NewIntegerSet([]int{1, 2, 3, 4})
t := NewIntegerSet([]int{3, 4, 5, 6})
nums = NewEmptyIntegerSet()
for n := range s {
for m := range t {
if n == m {
nums[n] = true
}
}
}
fmt.Println(s)
fmt.Println(t)
fmt.Println(nums)
}
入出力結果
% go run ./main.go
課題0.5.5
map[1:true 2:true 3:true 4:true 5:true]
map[1:true 2:true 3:true 4:true 5:true]
map[1:true 4:true 9:true 16:true 25:true]
課題0.5.6
map[1:true 2:true 4:true 8:true 16:true]
課題0.5.7
map[2:true 3:true 4:true 6:true 8:true 9:true 12:true]
課題0.5.8
map[2:true 4:true 6:true 10:true 12:true]
5
課題0.5.9
map[1:true 2:true 3:true 4:true]
map[3:true 4:true 5:true 6:true]
map[3:true 4:true]
%