トラック
/
Go
Go
/
演習
/
動物の魔法
動物の魔法

動物の魔法

学習演習

はじめに

math/randパッケージは、擬似乱数を生成するための機能を提供します。

0から99までのランダムな整数を生成するには、次のようにします。

n := rand.Intn(100) // n is a random int, 0 <= n < 100

rand.Float64関数は、0.0から1.0までのランダムな浮動小数点数を返します。

f := rand.Float64() // f is a random float64, 0.0 <= f < 1.0

スライス(やその他のデータ構造)をシャッフルする機能もあります。

x := []string{"a", "b", "c", "d", "e"}
// shuffling the slice put its elements into a random order
rand.Shuffle(len(x), func(i, j int) {
	x[i], x[j] = x[j], x[i]
})

シード

math/randパッケージが生成する数列は、真の乱数ではありません。特定の「シード」値を与えると、結果は完全に決まったものになります。

Go 1.20以降では、シードは自動的にランダムに選ばれるため、プログラムを実行するたびに異なる乱数列が得られます。

それ以前のバージョンのGoでは、シードの初期値は1でした。そのため、プログラムを実行するたびに異なる数列を得るには、乱数を取り出す前に、乱数生成器へ手動でシードを与える必要がありました。たとえば、現在時刻をシードとして使います。

rand.Seed(time.Now().UnixNano())

説明

エレインは、動物と魔法の杖が登場する新しい子ども向けゲームに取り組んでいます。そろそろ、サイコロを振ったり、ランダムな杖のエネルギーを生成したり、スライスをシャッフルしたりする関数を書く番です。

1. サイコロを振る

RollADie関数を実装しましょう。

これは、1から20までの数字が付いた、昔ながらの二十面体のサイコロです。

d := RollADie() // d will be assigned a random int, 1 <= d <= 20

2. 杖のエネルギーを生成する

GenerateWandEnergy関数を実装しましょう。 杖のエネルギーは、0.0以上12.0未満のランダムな小数にします。

f := GenerateWandEnergy()  // f will be assigned a random float64, 0.0 <= f < 12.0

3. スライスをシャッフルする

このゲームには、8種類の動物が登場します。

  • ant
  • beaver
  • cat
  • dog
  • elephant
  • fox
  • giraffe
  • hedgehog

8種類の動物をランダムな順番に並べたスライスを返すShuffleAnimals関数を書きましょう。

GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
Go Exercism

動物の魔法を始める準備はできましたか?

Exercismに登録すれば、34個のコンセプト165個の演習、そして本物の人間によるメンタリングとともに、Goを学んでマスターできます。すべて無料です。