コウです、よろしくお願いします!
「ゼロからプログラミングを始める」人に役立つ情報を発信しています!
Day12は「パターンをネストする」です。
ネストという謎の言葉が出てきました笑
なんのことなのかも含めてみていきましょう!
解答例と解説
初めに解答例と解説です。
解答例
コードの解答例は以下のようになります。
緑の部品が青の部品に組み込まれて、それがさらに赤の箱の中に入りました!!
解説
上記のコードを実行した結果がこちらになります。
赤の箱のコマンドを実行すると、青の部品(solveStair())が参照され、
さらにその中のコマンドを実行すると緑の部品(turnAround())が参照されています。
最後の宝石を取った後に初期位置に戻ってしまう部分は無駄なので、
アプリケーションを使うユーザー側に立つと改善の余地があるでしょうか。
今回のポイント
ネストとは
さてネストという言葉についてですが、
これはプログラミング業界では「入れ子」というもののようです。
ただ、「入れ子」と言われてもわかりませんよね(笑)
「ネスト=入れ子」とは、
「あるものの中に、それと同じ形や種類のものが入っている状態や構造」
のことです。
Playgroundsを見て確認していきましょう。
説明文には、
「大きい問題をいくつかの小さい部分に分けることを、分解と言う」
とあります。
要するに、
問題を小さい部品にそれぞれ分けて、それを大きな一つの箱に入れよう
ということでしょうか。
「パターンをネスト」してみる
この2つの部品を使って赤の四角で囲った箱を完成させようという訳ですね!
緑で囲った部品
緑で囲った部品は、turnAround()「後ろを向く」で、
初めからturnLeft()が2つ入っています。
turnLeft()が2つなので、360°回転して後ろを向くことができますね!
青で囲った部品
青で囲った部品は、solveStair()「階段をクリア」と名前はついていますが、
中身のコマンドは入力されていません。
「階段をクリア」の意味を考えてコマンドを入れてあげる必要があります。
ステージを確認しましょう。
Byteが真ん中にいて、その周りの4方向に宝石があります。
「宝石0/4」なのでこれらを全て取ることができればクリアです。
まずは宝石を4つ取ることを4分割して、
1つ取って元の位置(階段の下で宝石を向いている状態)に戻ることができれば、
それを4回繰り返せばイイですよね。
では宝石を1つだけ取るにはどうすればイイか。
turnAround()「後ろを向く」が定義されているので、
青の部品ではそれ以外をカバーすることを考えます。
言語化した方がわかりやすいでしょうか。
「1マス進む→宝石を取る→後ろを向く→1マス進む→右を向く」
これで宝石1つ分のパターンが出来上がります!
青の部品の中身は以下のようになります。
「後ろを向く」の部分は、緑の部品のturnAround()を使っています。
7行目のturnRight()はturnLeft()でもどっちでも大丈夫です。
時計回りに取っていくか反時計回りに取っていくかの違いだけですね。
赤で囲った箱
赤で囲った箱には、「4つの宝石を取る」を入れていきます。
先ほど作った青の部品が宝石1つ分のパターンなのでこれを4つ入れてあげれば良さそうですね!!
ネストしている感覚はありますでしょうか(笑)
ステージ攻略「パターンをネストする」
攻略
それでは、ステージを攻略していきましょう。
先述しましたが、「宝石0/4」なので、Byteの周りの宝石を全て取ります。
まとめ
「ネスト=入れ子」の感覚が掴めたでしょうか?
言葉は必ずしも覚える必要はないと思います。
作業を細かく分解して定義し、再利用していくということが意識できるようにしていきたいですね。
- 「ネスト=入れ子」である
- 「ネスト=入れ子」とは、「あるものの中に、それと同じ形や種類のものが入っている状態や構造」のこと
- 「作業を細かく分解して定義し、再利用していく」ことを意識する
次回はDay13「並んだ階段」でお会いしましょう!ではまた!!