2020年2月10日月曜日

開発環境

入門Goプログラミング (Nathan Youngman(著)、Roger Peppé(著)、吉川 邦夫(監修, 翻訳)、翔泳社)のUNIT 6(ネズミの穴を下って)、LESSON 26(ポインタ)の練習問題の解答を求めてみる。

コード

package main

import (
 "fmt"
 "math/rand"
 "strings"
 "time"
)

type turtle struct {
 x, y int
}

func (t *turtle) right() {
 t.x++
}
func (t *turtle) left() {
 t.x--
}
func (t *turtle) down() {
 t.y++
}
func (t *turtle) up() {
 t.y--
}

func (t turtle) String() string {
 return fmt.Sprintf("(%v, %v)", t.x, t.y)
}

func main() {
 for j := 0; j < 5; j++ {
  rand.Seed(time.Now().UnixNano())
  t := turtle{x: 0, y: 0}
  for i := 0; i < 10; i++ {
   fmt.Printf("移動回数: %v回 位置: %v\n", i, t)
   switch rand.Intn(4) {
   case 0:
    t.right()
   case 1:
    t.left()
   case 2:
    t.down()
   default:
    t.up()
   }
  }
  fmt.Printf("最終位置: %v\n", t)
  fmt.Println(strings.Repeat("-", 50))
 }
}

入出力結果(Zsh、PowerShell、Terminal)

% go run ./turtle.go
移動回数: 0回 位置: (0, 0)
移動回数: 1回 位置: (0, 1)
移動回数: 2回 位置: (0, 2)
移動回数: 3回 位置: (1, 2)
移動回数: 4回 位置: (2, 2)
移動回数: 5回 位置: (1, 2)
移動回数: 6回 位置: (0, 2)
移動回数: 7回 位置: (0, 1)
移動回数: 8回 位置: (1, 1)
移動回数: 9回 位置: (1, 0)
最終位置: (1, -1)
--------------------------------------------------
移動回数: 0回 位置: (0, 0)
移動回数: 1回 位置: (0, 1)
移動回数: 2回 位置: (0, 0)
移動回数: 3回 位置: (-1, 0)
移動回数: 4回 位置: (-2, 0)
移動回数: 5回 位置: (-2, -1)
移動回数: 6回 位置: (-2, -2)
移動回数: 7回 位置: (-3, -2)
移動回数: 8回 位置: (-2, -2)
移動回数: 9回 位置: (-1, -2)
最終位置: (0, -2)
--------------------------------------------------
移動回数: 0回 位置: (0, 0)
移動回数: 1回 位置: (-1, 0)
移動回数: 2回 位置: (0, 0)
移動回数: 3回 位置: (0, 1)
移動回数: 4回 位置: (0, 2)
移動回数: 5回 位置: (-1, 2)
移動回数: 6回 位置: (-2, 2)
移動回数: 7回 位置: (-1, 2)
移動回数: 8回 位置: (-2, 2)
移動回数: 9回 位置: (-2, 1)
最終位置: (-3, 1)
--------------------------------------------------
移動回数: 0回 位置: (0, 0)
移動回数: 1回 位置: (-1, 0)
移動回数: 2回 位置: (-1, -1)
移動回数: 3回 位置: (-1, -2)
移動回数: 4回 位置: (0, -2)
移動回数: 5回 位置: (1, -2)
移動回数: 6回 位置: (1, -1)
移動回数: 7回 位置: (1, -2)
移動回数: 8回 位置: (2, -2)
移動回数: 9回 位置: (2, -1)
最終位置: (3, -1)
--------------------------------------------------
移動回数: 0回 位置: (0, 0)
移動回数: 1回 位置: (-1, 0)
移動回数: 2回 位置: (-2, 0)
移動回数: 3回 位置: (-3, 0)
移動回数: 4回 位置: (-4, 0)
移動回数: 5回 位置: (-3, 0)
移動回数: 6回 位置: (-2, 0)
移動回数: 7回 位置: (-1, 0)
移動回数: 8回 位置: (0, 0)
移動回数: 9回 位置: (0, -1)
最終位置: (-1, -1)
--------------------------------------------------
%

0 コメント:

コメントを投稿