Go TourのExercise
GoのTourのExerciseの回答
プログラミング言語 Goには、初学者が言語仕様を学べるTourというコンテンツがあります。
その中に練習問題(Exercise)があったので、自分の回答を学習メモとして記していきます。
Exercise: Slices
これちょっと説明文が分かりづらい気がしました。Pix
メソッドの仕様のポイントを羅列します。
Pic
メソッドの引数で受け取るdx
×dy
のサイズの2次元配列を返す- 配列の中身は各座標の
x
とy
をもとにした整数値(uint8
)を渡す- 別に
x
とy
をもとにしなくても整数値が0〜255の範囲であれば画像は生成される- 0を渡せば青一色の画像になる
- 中身の整数値によって青色の濃さが変わる
- 0に近いほど色が濃くなり、255に近いほど色が薄くなる
- 例示されている整数値の計算パターン
は使わなくてもよい
(x+y)/2
、x*y
、x^y
が面白い画像ができるというだけ
- 別に
コード
package main import "golang.org/x/tour/pic" func Pic(dx, dy int) [][]uint8 { // 2次元配列の初期化 pic := make([][]uint8, dy) for y := 0; y < dy ;y++ { // 横列の配列を初期化 row := make([]uint8, dx) for x := 0; x < dx ;x++ { // 色を表現する整数値を代入 row[x] = uint8((x+y)/2) } // 横列の配列を保存 pic[y] = row } return pic } func main() { pic.Show(Pic) }
出力
Exercise: Maps
コード
package main import ( "golang.org/x/tour/wc" "strings" ) func WordCount(s string) map[string]int { // 文字列をスライスに分割 words := strings.Fields(s) // Mapsの初期化 m := make(map[string]int) // intのゼロ値は0なので、同じ単語(同じKey)のたびに1を足す // m[value]++でも可 for _, value := range words { m[value] = m[value] + 1 } return m } func main() { wc.Test(WordCount) }
出力
PASS f("I am learning Go!") = map[string]int{"Go!":1, "I":1, "am":1, "learning":1} PASS f("The quick brown fox jumped over the lazy dog.") = map[string]int{"The":1, "brown":1, "dog.":1, "fox":1, "jumped":1, "lazy":1, "over":1, "quick":1, "the":1} PASS f("I ate a donut. Then I ate another donut.") = map[string]int{"I":2, "Then":1, "a":1, "another":1, "ate":2, "donut.":2} PASS f("A man a plan a canal panama.") = map[string]int{"A":1, "a":2, "canal":1, "man":1, "panama.":1, "plan":1}
Exercise: Fibonacci closure
コード
package main import "fmt" func fibonacci() func() int { // 保存されるスライスの`s` s := []int{} return func () int { length := len(s) value:= 0 switch length { case 0: value = 0 case 1: value = 1 default: value = s[length - 1] + s[length - 2] } s = append(s, value) return value } } func main() { f := fibonacci() for i := 0; i < 10; i++ { fmt.Println(f()) } }
出力
0 1 1 2 3 5 8 13 21 34