コウです、よろしくお願いします!
「ゼロからプログラミングを始める」人に役立つ情報を発信しています!
今回はDay20「右にも左にも」の解説になります
解答例と解説
解答例と解説から確認しましょう!
解答例
コードの解答例は以下のようになります。
けっこうな長さのコードになりました。
しかしfuncやforを使わないよりはシンプルでわかりやすいのではないでしょうか!
解説
上記のコードを実行した結果がこちらになります。
全ての作業を完了することができました!!
今回のポイント
宝石を集めるパターン・スイッチを入れるパターン
今回はたくさんの宝石を集めて、たくさんのスイッチを切り替えます。
Byteの初期位置から見て右側に宝石、左側にスイッチが並んでいますね。
まずは、宝石を集めるパターンとスイッチを切り替えるパターンを考えましょう。
宝石を集めるパターン
合計で6個の宝石がありますが、
2個ずつ並んでいるので2個集めるのを3回繰り返します。
2個の宝石を集めるには、初期位置から
「右を向く→1マス進む→宝石を集める→1マス進む→宝石を集める→後ろを向く→2マス進む」
になります。
これでByteは宝石を2個集めたあと、初期位置にスイッチの方向を向いて戻ってきます。
関数を定義すると次のようになります。
スイッチを切り替えるパターン
スイッチを切り替えるのは、宝石を集めたあとに続けます。
Byteは宝石の方を向いているので
「1マス進む→スイッチを切り替える→1マス進む→スイッチを切り替える→後ろを向く→2マス進む」
これでスイッチ2つを切り替えて元の位置に戻ってきました。
このあとは3個目4個目の宝石を取りにいきたいので、
「左を向く→1マス進む」も追加しておきましょう。
関数を定義すると次のようになります。
ステージ攻略「右にも左にも」
攻略
それではステージを攻略していきましょう!
「宝石0/3」「スイッチ0/3」なので、それぞれ先ほど定義した関数を使っていきます。
「宝石を2個集める→スイッチを2つ切り替える」
を1セットとしてこれを3回繰り返します。
すなわちfor文に入力する回数は3になります!
まとめ
先に関数を定義して、それをfor文の中で活かすという、前回のような流れになりました。
しかし今回はfor文の中が圧倒的にシンプルでしたね。
このコードだけが絶対に正解という訳ではありませんが、
他の人が見てもわかりやすいのではないでしょうか。
- 決まったパターンを見つけたら関数として定義しておく
次回はDay21「4つの場所に4つの宝石」でお会いしましょう!ではまた!!