補助関数の利用
このページでは,問題を解くにあたり,どのような関数を
定義しておくと役に立ちそうかを整理したいと思います.
他の項目で解説したものも含みます.
n倍関数
- 単純なn倍関数
a(X):XX, a(X):XXX, a(X):XXXX, ….
- 方向転換を織り交ぜたn倍関数
a(X):XXXrなど.
- 特殊な2倍関数:特に4倍として使える.
a(X):XrXなど.
- 数値によるn倍関数.
a(X):sa(X-1), a(X,Y):Xa(X,Y-1)など.
- 数値によるn倍関数に方向転換を織り交ぜたもの.
a(X,Y):Xa(X,Y-1)lなど.
再帰の打ち切り(ボム)
Xを1つ含む関数
a(X):pXqの形しかないですね.これが有効な場面もあります.
- pとqが合計n個ずつある.
- どの時点まででもpがqよりも多くある.
ようなものは,この関数を使うとn-byteで書けます.例えば
ppppqqppqqqpppqqqppqqq
というような形なら,
a(a(a(a())a(a()))a(a(a()))a(a()))
という具合です.カッコが多いけどこれはbyte数には含まれません.
書いた後で見ても,何が何だかわけが分からないのが特徴です(笑)
もちろんカッコ内にs,l,rなどを入れると,pとqに方向転換lが紛れているような
ものも作ることができます.現時点では重要視されていない手法だと思いますが
応用例もいくらかあるようなので考えてみてください.
多変数関数
- a(X,Y):XYX:離れた部分の2倍をする関数.
80byteを超えるような"長文問題"では重宝しています.
- a(X,Y):XXYXYYY:3倍関数と4倍関数の両立.
3倍,4倍だけでなく,a(s,r)でssrslが作れたりするので
この手の補助関数はXとYの配置も結構悩みどころ.
戻る