関数(とその他の数学とコンピュータに関する予備知識) 入門 タプルの代わりに配列、配列のスライス
行列プログラマー (Philip N. Klein(著)、松田 晃一(翻訳)、弓林 司(翻訳)、脇本 佑紀(翻訳)、中田 洋(翻訳)、齋藤 大吾(翻訳)、オライリー・ジャパン)の0章(関数(とその他の数学とコンピュータに関する予備知識))、0.5(ラボ: Python入門 - 集合、リスト、辞書、内包表記)、0.5.6(タプル)のインデックス指定とアンパックによるタプルの要素取得の課題0.5.14、0.5.15、0.5.16の解答を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.14")
s := NewIntegerSet([]int{-4, -2, 1, 2, 5, 0})
arySlice := [][3]int{}
for i := range s {
for j := range s {
for k := range s {
if i+j+k == 0 {
arySlice = append(arySlice, [3]int{i, j, k})
}
}
}
}
fmt.Println(arySlice)
fmt.Println("課題0.5.15")
arySlice = [][3]int{}
for i := range s {
for j := range s {
for k := range s {
if !(i == 0 && j == 0 && k == 0) && i+j+k == 0 {
arySlice = append(arySlice, [3]int{i, j, k})
}
}
}
}
fmt.Println(arySlice)
fmt.Println("課題0.5.16")
fmt.Println(arySlice[0])
}
入出力結果
% go run ./main.go
課題0.5.14
[[-4 2 2] [-2 0 2] [-2 1 1] [-2 2 0] [1 1 -2] [1 -2 1] [2 2 -4] [2 0 -2] [2 -4 2] [2 -2 0] [0 0 0] [0 -2 2] [0 2 -2]]
課題0.5.15
[[-2 1 1] [-2 2 0] [-2 0 2] [1 -2 1] [1 1 -2] [2 -2 0] [2 2 -4] [2 0 -2] [2 -4 2] [0 -2 2] [0 2 -2] [-4 2 2]]
課題0.5.16
[-2 1 1]
%