いきなりですが,9byteで書けるコードのうち
a(X):[1]a([2]),a([3])
の型のものを分類しましょう.[1]と[2]と[3]をあわせて5bytes,
全部書きだしても,人間の手作業で出来る程度です.
ただの繰り返しになるような無駄なものを除いて,
このリストが自分のPCには保存されていました.
手作業なので,8byte以下でも書けるものがあったりしますが気にせずに.
ネーミングも適当です.重複(見た目は違うが同じ挙動)もあるかも.
大事な抜けは無いと思いますが,あったらお知らせください.
さて,分類してどうするかですが…勿論まずは,9byteの問題を解くのに利用できます.
挙動のタイプを知っておけば試さなければいけないものはかなり少ないです.
他にも,10byte以上の再帰パターンを構成する上でも,
9byte分類が大きなヒントになる場合が少なくありません.
例えば斜めに進む
a(X):XXa(lX),a(s)
というコードにsをつけて
a(X):XXa(slX),a(s)
としてみると,違ったバランス(?)で斜めに進んでいくのが分かると思います.
他にも,例えば"s"を"sslsr"に変えてみたりすると,元のパターンを
斜めに捻ったものが出てくることが分かると思います.例えば
a(X):Xla(sslsX),a()
などとするとZ字型を斜めにしたようなものが出てくるはずです.
10byte~12byte付近の難問の中には,このような9byteコードの変形
として説明できるものもあります.似た挙動をする9byteコードをいじくって
解けないか考えてみると上手くはまるかもしれません.直接的に9byte分類が
役立つことは少ないですが,ある程度頭に入れておくとプラスになると思います.
ところでなぜ9byteという数字を選んだのかというと,
単純に8byte以下は少し考えると解けるのが望ましいと思うというのと,
10byteは手作業だとかなり大変だというのが理由です.
もちろん10byteの再帰を完全に理解出来ればもっと強いのでしょうけど….