トラック
/
Go
Go
/
演習
/
幼稚園の庭
幼稚園の庭

幼稚園の庭

中級

はじめに

幼稚園のクラスでは、植物を育てることについて学んでいます。 先生は、クラスの子どもたちに種を渡し、土に植えて育ててもらうのがよい考えだと思いました。 そこで、子どもたちは窓辺に小さなカップを並べ、それぞれのカップに1種類ずつ植物を植えました。 子どもたちは、用意された4種類の種、grass・clover・radishes・violetsの中から、好きなものを選びました。

説明

この課題では、図をもとに、幼稚園のクラスのどの子どもがどの植物を担当しているかを判定します。

クラスには12人の子どもがいます:

  • Alice、Bob、Charlie、David、Eve、Fred、Ginny、Harriet、Ileana、Joseph、Kincaid、Larry

4種類の種が植えられています:

植物 図での表記
Grass G
Clover C
Radish R
Violet V

それぞれの子どもには4つのカップが与えられ、各列に2つずつ置かれます:

[window][window][window]
........................ # each dot represents a cup
........................

先生は、子どもたちの名前のアルファベット順にカップを割り当てます。つまり、Aliceが最初で、Larryが最後になります。

次の図は、Aliceの植物を表す例です:

[window][window][window]
VR......................
RG......................

窓に一番近い1列目には、violetとradishがあります。 2列目にはradishとgrassがあります。

プログラムには、窓に一番近い列から始めて、左から右へと植物が与えられます。これをもとに、どの植物がどの子どものものかを判定できるようにします。

たとえば、庭が次のようになっているとします:

[window][window][window]
VRCGVVRVCGGCCGVRGCVCGCGV
VRCCCGCRRGVCGCRVVCVGCGCV

このとき、Aliceの植物を尋ねられると、次のように返します:

  • Violets, radishes, violets, radishes

一方、Bobの植物を尋ねると、次のようになります:

  • Clover, grass, clover, clover

実装

diagram引数では、各行の先頭に\nが付きます。 こうすることで、Goの生文字列リテラルを使って、ソースコード中の図を左揃えの2行としてきれいに書けるようになります。 たとえば、テストには次のものが含まれていることがあります。

        diagram := `
VVCCGG
VVCCGG`

children引数がnilの場合は、上の指示で定義されている子どものリストを使います。 nilでない場合は、与えられた値を使います。

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

幼稚園の庭を始める準備はできましたか?

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