配列 2. 反復処理を試す

for文によるループと配列の組み合わせを学ぶステージです。配列に入っているひとつひとつの要素(オブジェクト)に対して同じ処理をさせることができます。全く同じ処理というだけでなく、要素毎の違い活用した処理ができるのが強みです。
例えばこのステージでは、0〜5番目の各列に宝石とスイッチを配置します。今までのやり方だと、こんな風になります。

ほぼ同じパターンが5回繰り返されますが、残念ながらatColumn:パラメーターが違うので単純なfor文ループにはできません。
まさにこんな時に、配列を使った繰り返しが役に立ちます。
同じforで始まりますが、

のように書きます。これで「(配列名)の中にある要素ひとつひとつを(ループ内での変数名)に入れつつ、(ループさせたい処理)を実行」という意味になります。
正解例のコードを見てみましょう。

columns配列の中身が前から1つずつ取り出され、columnという変数に入れられてループ内の処理が行われます。1ループ目はcolumnの中身は0です。なので、world.placeメソッドの中のatColumn:パラメーターには0と書いたのと同じことになります。
そして最初のループが終わって繰り返される時、columnには2番目の値の1がセットされます。つまり2回目のループではatColumn:は1になります。以下、atColumn:が2,3,4,5と変化しながら繰り返されていきます。最終的に全ての陸地にスイッチと宝石が並んでいることでしょう。
このように、ちょっとずつ違う処理を繰り返す時に、その違う部分を変数に置き換えておき、このfor〜in文で毎回変数の中身を変えてやる方法が利用できます。

配列 1. 情報をまとめて保存

配列とは変数の一種ですが、中に仕切りがあってそれぞれの部屋に通し番号がついているものを想像してください。仕切りがあるので中に複数の値やオブジェクトを格納しつつ、全体をひとまとまりとして扱うことができます。また中身を通し番号で指定できるのでループと非常に相性が良いのが特徴です。
出題文通り、まずはそのまま実行してみましょう。4体のキャラクターが出現します。これは、最後の行にある

がrowsという配列変数の中のひとつひとつの数字を座標にしてキャラクターを並べてくれます。placeCharactersコマンドについてはあまり深く考える必要はありません。ともかくrowsの中に0が入っていたら(0,0)に、1があれば(0,1)にキャラクターが出ると思っておきましょう。
さて、最初の状態では、4体しか出てきません。空いたコマが2つあります。(0,2)と(0,6)ですね。逆にいうと、(0,0)、(0,1)、(0,3)、(0,4)に出現しています。これがそのまま先頭行の

から来ているわけです。足りない数字を追加してやりましょう。数字と数字は半角カンマで区切ります。

(標準の各英文コメントの後ろに訳を入れてあります)

ステージを作る 7. 自分だけのステージ

ここは特にクリア条件もなく、world.place()メソッドで好きなオブジェクトを置いてみましょう、というステージなので、それこそ正解はないので今まで憶えたパターンをおさらいしてみましょう。
座標は列番号columnと行番号rowの組み合わせで指定します。マップ上の特定のコマをタップすると(0,0)のような形で表示されますので、自分で数えるよりも早いでしょう。

ステージを作る 6. ループを作る

一見すると4カ所の隙間をふさいで長方形のステージにしてしまえば、あとは規定宝石数集めるまでグルグルまわればいい気がしますが、ワープがあるのでそうもいきません。
私は2箇所だけつないで、4ブロックが真っ直ぐ並ぶ島が4つ、という状態にしました。実はこれでワープを通ると長い一本道と同じことになるのです。あとは、そこをひたすら往復して宝石を集めていけばいつか必要数集めて終わることができます。つまりポイントは、「行き止まりになったら振り返る」「宝石があったら取る」「規定数宝石を集めるまで繰り返す」ということになります。

なお、集めなければならない宝石の数totalGemsはコードを実行する度に変化します。不完全なコードでも、totalGemsがたまたま2とか少ない数だと上手くクリアできてしいまう場合があります。何度か実行してどんな数になってもクリアできることを確認しましょう(その時々の集めないといけない数は実行した時に空の左上のところに出ます)。

ちなみにワープポータルの上にブロック置いて塞いでやれば冒頭に書いたように大きな長方形ステージにできるんじゃないかと思ったんですが、どうもワープポータルは積み上がったブロックの上に出現してしまうようですね。
また最初からあるワープポータルは呼び名がわからないので、.isActive = falseでオフにすることもできなそうです。

方向転換処理のところは、

とも書けるでしょう。ただし3つのif全てに isBlocked & がついているので、これを外側の大きなif文として囲ってネストにしています。こうすると、個々のif文の条件式が1項減って見やすくなる気がしませんか?また、今回は正面だけが行き止まりというパターンはないので、外側のif文で正面が行き止まり(isBlocked)を条件とした後、残る可能性は「両側行き止まり」「右が行き止まり」「左が行き止まり」だけになります。なので、最後はelse ifにする必要もなく、32行目はただのelseで済ますことができます。

ステージを作る 5. 島を渡る

なかなか複雑なステージです。というか単純に1ステップずつコードに落としていく分には簡単ですが、上手く関数やループでまとめようとするとなかなかやり甲斐のあるパズルのようなステージです。
説明文にある通りやり方は無数にあると思うので、自分なりの方法を考えてみてほしいのですが、とりあえず以下の例では、「宝石を基点に見て、90°違いの2方向の1コマ隣に閉スイッチ」という組み合わせが3カ所にあるという点に着目し、1かたまりを処理した後、ワープを使って他のペアに移動する、という流れで考えました。向きとワープをON/OFFするタイミングがキモです。