1まずは文法を理解しよう!基本は「s,r,l」まずは基本中の基本の「s,r,l」についていろいろと。「s」は多分"straight"の略で「一歩前進」です。「r」は"right"の略で「90°右に回る」です。「l」は"left"の略で「90°左に回る」です。Editを開いて下さい。Editは自由なmap・初期位置を自分で設定できるので、コードがどのように動くのかを試すのに便利です。Editでいろいろなコードを試してみるのも上達への近道だったりします。そこにsslslsと書いて実行してみて下さい。「7」の字を描いて進んだと思います。「前に2つ進んで左を向き、前に1つ進んでさらに左を向き、前に1つ進む」となりますね。次にsslslslsを実行してみて下さい。「9」の字を描いたと思います。通ったマスは、「7」の字のコードの通ったマスと同じですね。凸(自キャラ)の通った軌道にtarget(白丸)を置いてそれぞれのコードを実行してみるとはっきりと分かります。(ただし「Cleared!」になると実行が止まるような仕様になっているので、「9」は最後まで描けません。)またslsrsrsと書いても、通るマスは同じはずです。「同じ形でもそれを辿る方法は1つではない」ということです。その複数あるパス(辿り方)の中から一番短いコードで書けそうなものを選ぶのです。場合によっては、同じ場所を何回もぐるぐる回るようなパスが良い場合もあったりします。方向転換、すなわち「右に回る」などは何通りもの書き方があるということです。「後ろを向く」=「180°回る」は「rr」とも「ll」とも書けたりします。「後ろを向く」は正しい方を選ぶとうまく縮められることがよくあるので覚えておいて下さい。0545何回も出てくるものを置き換える今回は、一番基本的な「置換」による短縮です。このコードを見て下さい。sssssrssssslsssss稲妻のような形を描いたはずです。このコードは17B(Byte)ですね。見ると「sssss」が3回出てきています。これを置換してみましょう。x:sssssxrxlxこのように「x:sssss」と書いておくことによって、「x」を「sssss」として使えるようになります。「:」(コロン)は1Bとして数えないので、全部で11Bですね。6Bも短縮できました。次はこのコードを「置換」してみましょう。sssrsss7Bですね。「sss」が2回出てきているので、先ほどと同じように置換してみましょう。x:sssxrx7Bですね。置換前のコードも7Bだったので、短縮できていませんね。短縮できなかったのかを考えてみましょう。1つ目の例と2つ目の例の違いを挙げてみます。1つ目の方が置換される部分のByte数が多い。1つ目の方が置換される部分の数が多いつまり、置換される部分の長さと個数が多い方が、置換の効果が大きくなるのです。短縮できるByte数の関係を表にしてみました。横は長さ、縦は個数です。マイナスの数字は、逆に長くなってしまうことを表しています。14Bガッツリ覚える必要はありませんが、なんとなく感覚を掴んでおくとと良いと思います。2Bなら4個、3Bなら3個、4Bなら2個以上なら短縮が出来るという感覚は身につけておきましょう。最後に下の2つのコードを置換によって短縮してみましょう。llssssrssss11Bです。「ssss」という4Bの部分が2回出てきているので1B縮まりますね。x:ssssllxrx10Bです。実はもう1B縮みます。前回の講座の内容を思い出してみましょう。「ll」は「rr」とも書けるんでしたね。それを踏まえて書き直すと、x:ssssrrxrxとなり、これはx:rssssrxxと短めることができ、9Bになりました。sssrssslsssrsssrssslsss23Bと長めです。「sss」が6つも出てきているので明らかに短縮できますね。x:sssxrxlxrxrxlx15Bと一気に8Bも縮みました。これで油断してはいけません。見てみると「xrxlx」が2回出てきています。5Bが2回出てきているので短縮できますね。x:sssy:xrxlxyry13Bです。最初に比べ10Bも縮みました。「置換」による短縮は一番の基本なので是非習得しましょう。「同じものを繰り返す」という状況が出てきます。今回はそのうちのひとつである「関数」について書きたいと思います。このコードを短縮してみましょう。srslsrslsrslslsrslsrslsr24Bです。見にくいですね^^構造を説明すると、srslとslsrが3回ずつ繰り返されてる形です。前回の講座の「置換」を使ってみましょう。x:srsly:slsrxxxyyy16Bです。4文字が3回出てくるのを2個置換したので8B縮みました。次に「関数」を使って短縮してみましょう。f(X):XXXf(srsl)f(slsr)15Bになりました。同じものが繰り返される部分を短縮することが出来ます。6※「x^2」は「xの二乗」という意味です。slsrslsrslsrとなります。「引数」(この例の場合"X")は大文字でなければいけない点に注意しましょう。「f(X):XXX」は同じものを3回繰り返す「関数」なので、「3倍関数」と呼んでいます。次にこのコードを縮めてみましょう。lsrssrssrssrslsssslssrssssrssssrssssrss39Bです。今度は4倍関数を定義すれば良いですね。f(X):XXXXlf(srs)lf(s)lf(ssrss)21Bです。実はまだ2B縮みます。f(X):lXXXXf(srs)f(s)f(ssrss)19Bです。定義の仕方によってはコードを短くできることがよくあります。ややこしいので、慣れるまでは「○倍関数」だけでも使えると良いでしょう。0722関数を入れ子にしてみよう前回やった「関数」ですが、入れ子にすることでさらに便利になります。ssssssssrssssssssrssssssssrssssssssr36Bです。一辺8歩の正方形を描きます。前回と同じように短縮してみましょう。f(X):XXXXf(ssssssssr)16Bです。見ると「ssssssss」は「ss」を4回繰り返したものですね。これを「f(ss)」に書き直してみると、こうなります。f(X):XXXXf(f(ss)r)11Bです。このように関数の中に関数を書くことも出来ます。1つ例を出してみます。ssssrssssrssssrssssrrssssrssssrssssrssssrrssssrssssrssssrssssrrssssrssssrssssrssssrr「田」の字を描きます。84Bと、めちゃくちゃムダにあふれていますね。f(X):XXXXf(f(f(s)r)r)12Bになりました。ややこしくなってきましたね。分からなくなったら、メモ帳とかを使って展開してみると良いと思います。ちなみに、このコードはあと1B縮みます。