2020年5月8日金曜日

開発環境

入門Goプログラミング (Nathan Youngman(著)、Roger Peppé(著)、吉川 邦夫(監修, 翻訳)、翔泳社)のUNIT 5(状態と振る舞い)、LESSON 25(チャレンジ:火星の動物保護区域)の解答を求めてみる。

コード

package main

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

type animal interface {
 move() string
 eat() string
}
type dog struct {
 name string
}

func (d dog) String() string {
 return d.name
}
func (d dog) move() string {
 return "テクテク"
}
func (d dog) eat() string {
 switch rand.Intn(2) {
 case 0:
  return "肉"
 default:
  return "魚"
 }
}

type cat struct {
 name string
}

func (c cat) String() string {
 return c.name
}
func (c cat) move() string {
 return "スルスル"
}
func (c cat) eat() string {
 switch rand.Intn(2) {
 case 0:
  return "肉"
 default:
  return "魚"
 }
}

type gopher struct {
 name string
}

func (g gopher) String() string {
 return g.name
}
func (g gopher) move() string {
 return "ササッ"
}
func (g gopher) eat() string {
 switch rand.Intn(2) {
 case 0:
  return "肉"
 default:
  return "魚"
 }
}

type python struct {
 name string
}

func (p python) String() string {
 return p.name
}
func (p python) move() string {
 return "ササッ"
}
func (p python) eat() string {
 switch rand.Intn(2) {
 case 0:
  return "肉"
 default:
  return "魚"
 }
}
func day(a animal) {
 switch rand.Intn(2) {
 case 0:
  fmt.Printf("%v %v\n", a, a.move())
 default:
  fmt.Printf("%vは%vを食べた。\n", a, a.eat())
 }
}
func main() {
 rand.Seed(time.Now().UnixNano())

 animals := []animal{
  dog{"犬"},
  cat{"ネゴ"},
  gopher{"Gopher"},
  python{"ニシキヘビ"},
 }
 for sol := 1; sol <= 3; sol++ {
  fmt.Printf("%v日目\n", sol)
  for hour := 0; hour < 24; hour++ {
   fmt.Printf("%2v時 ", hour)
   if hour < 7 || hour > 18 {
    fmt.Println("動物たちは睡眠中…")
   } else {
    day(animals[rand.Intn(len(animals))])
   }
  }
 }
}

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

% go build mars.go
% ./mars 
1日目
 0時 動物たちは睡眠中…
 1時 動物たちは睡眠中…
 2時 動物たちは睡眠中…
 3時 動物たちは睡眠中…
 4時 動物たちは睡眠中…
 5時 動物たちは睡眠中…
 6時 動物たちは睡眠中…
 7時 ネゴは肉を食べた。
 8時 犬は魚を食べた。
 9時 Gopher ササッ
10時 ネゴは魚を食べた。
11時 ニシキヘビ ササッ
12時 ネゴ スルスル
13時 犬は肉を食べた。
14時 犬は肉を食べた。
15時 ニシキヘビ ササッ
16時 犬 テクテク
17時 犬は魚を食べた。
18時 犬は魚を食べた。
19時 動物たちは睡眠中…
20時 動物たちは睡眠中…
21時 動物たちは睡眠中…
22時 動物たちは睡眠中…
23時 動物たちは睡眠中…
2日目
 0時 動物たちは睡眠中…
 1時 動物たちは睡眠中…
 2時 動物たちは睡眠中…
 3時 動物たちは睡眠中…
 4時 動物たちは睡眠中…
 5時 動物たちは睡眠中…
 6時 動物たちは睡眠中…
 7時 ネゴ スルスル
 8時 犬 テクテク
 9時 Gopherは肉を食べた。
10時 ネゴは魚を食べた。
11時 ニシキヘビは魚を食べた。
12時 犬は魚を食べた。
13時 Gopherは魚を食べた。
14時 Gopher ササッ
15時 ニシキヘビ ササッ
16時 ネゴは魚を食べた。
17時 ネゴ スルスル
18時 ニシキヘビは肉を食べた。
19時 動物たちは睡眠中…
20時 動物たちは睡眠中…
21時 動物たちは睡眠中…
22時 動物たちは睡眠中…
23時 動物たちは睡眠中…
3日目
 0時 動物たちは睡眠中…
 1時 動物たちは睡眠中…
 2時 動物たちは睡眠中…
 3時 動物たちは睡眠中…
 4時 動物たちは睡眠中…
 5時 動物たちは睡眠中…
 6時 動物たちは睡眠中…
 7時 ニシキヘビ ササッ
 8時 ニシキヘビ ササッ
 9時 Gopher ササッ
10時 ネゴ スルスル
11時 Gopher ササッ
12時 Gopher ササッ
13時 Gopherは肉を食べた。
14時 Gopher ササッ
15時 犬 テクテク
16時 ニシキヘビは魚を食べた。
17時 Gopher ササッ
18時 犬 テクテク
19時 動物たちは睡眠中…
20時 動物たちは睡眠中…
21時 動物たちは睡眠中…
22時 動物たちは睡眠中…
23時 動物たちは睡眠中…
% ./mars
1日目
 0時 動物たちは睡眠中…
 1時 動物たちは睡眠中…
 2時 動物たちは睡眠中…
 3時 動物たちは睡眠中…
 4時 動物たちは睡眠中…
 5時 動物たちは睡眠中…
 6時 動物たちは睡眠中…
 7時 犬 テクテク
 8時 Gopher ササッ
 9時 Gopher ササッ
10時 ネゴは肉を食べた。
11時 Gopherは肉を食べた。
12時 ニシキヘビ ササッ
13時 犬 テクテク
14時 Gopher ササッ
15時 Gopher ササッ
16時 ネゴ スルスル
17時 ニシキヘビ ササッ
18時 犬 テクテク
19時 動物たちは睡眠中…
20時 動物たちは睡眠中…
21時 動物たちは睡眠中…
22時 動物たちは睡眠中…
23時 動物たちは睡眠中…
2日目
 0時 動物たちは睡眠中…
 1時 動物たちは睡眠中…
 2時 動物たちは睡眠中…
 3時 動物たちは睡眠中…
 4時 動物たちは睡眠中…
 5時 動物たちは睡眠中…
 6時 動物たちは睡眠中…
 7時 犬 テクテク
 8時 犬は肉を食べた。
 9時 Gopherは魚を食べた。
10時 犬 テクテク
11時 犬 テクテク
12時 Gopherは魚を食べた。
13時 Gopherは肉を食べた。
14時 ニシキヘビは魚を食べた。
15時 ニシキヘビは肉を食べた。
16時 ネゴは肉を食べた。
17時 犬は肉を食べた。
18時 ネゴ スルスル
19時 動物たちは睡眠中…
20時 動物たちは睡眠中…
21時 動物たちは睡眠中…
22時 動物たちは睡眠中…
23時 動物たちは睡眠中…
3日目
 0時 動物たちは睡眠中…
 1時 動物たちは睡眠中…
 2時 動物たちは睡眠中…
 3時 動物たちは睡眠中…
 4時 動物たちは睡眠中…
 5時 動物たちは睡眠中…
 6時 動物たちは睡眠中…
 7時 ネゴは魚を食べた。
 8時 ネゴ スルスル
 9時 ネゴは肉を食べた。
10時 Gopher ササッ
11時 Gopher ササッ
12時 ニシキヘビ ササッ
13時 ネゴ スルスル
14時 ネゴ スルスル
15時 犬 テクテク
16時 ネゴ スルスル
17時 ネゴ スルスル
18時 ニシキヘビは魚を食べた。
19時 動物たちは睡眠中…
20時 動物たちは睡眠中…
21時 動物たちは睡眠中…
22時 動物たちは睡眠中…
23時 動物たちは睡眠中…
% 

0 コメント:

コメントを投稿