特殊な2倍関数
をテンプレートにして作成
[
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
メニュー
]
開始行:
*特殊な2倍関数 [#gf9854a5]
Herbertは,4つの移動方向を持つという意味で,4という数は少...
例えば特定の動作を4回繰り返し,さらにはそれをさらに向きを...
そこそこ頻繁に要求されるように思います.
4倍すべきものが何かの2倍だったりすることも多く,~
4倍したいけど2倍関数を用意しておく方が賢い場面はしばしば...
実際,
f(X):XXXX
f(p)
と
f(X):XX
f(f(p))
では後者の方が少ないんですよね.4倍を3回やると4倍関数の方...
小回りが利く2倍関数は重要です.
----
いきなりですが,田の字を描く次のコードを見てみましょう.
f(X):XX
f(f(f(f(sr))r))
4倍したものを,向きを変えてさらに4倍しています.
この動きとほぼ同じ動きを,同byte数の別のコードでも書くこ...
f(X):XrX
f(f(f(f(s))r))
動き終わった際の向きが違います("r"が足りない)が,同じ経...
2倍関数に方向転換を織り交ぜてあるため,関数の定義自体は1b...
実行ラインで1byteの得をしており,合計で同じbyte数のコード...
なお,「2倍関数に方向転換を混ぜる」という発想でf(X):XXrな...
定義するという発想もありそうですが,この関数で同経路を辿...
実はXXrやrXXなどの関数は,「4倍を作る」のには向いていませ...
"r"の位置を少し変えただけで大きく性質が変わって不思議な感...
これについては変数変換の講でも触れようと考えています.
逆に言うと今回の2倍関数f(X):XrXは4倍操作との相性が良いで...
より一般的に,''f(X):XpXの形の2倍関数は4倍操作との相性が...
具体的には,f(f(X))と2回合成すると,
w(w(X))=XpXpXpX
となって,"Xp"の''4倍からpだけ足りない''ものが出てきます.~
w(X):XrX,w(w(w(w(s))r))というコードで,田を描くことや元の...
上の例では活用できていませんが, 通常の2倍関数と比べ, srsl...
----
この形のテクニックで筆者が最初に利用し始めたのが, XrXやXl...
それ以上によく用いられるのが,
f(X):XssX
や
f(X):XsrslX
などの関数です. この場合,
f()
としてssやsrslのよく現れるパーツを作れることが強みで,
a:ss
f(X):XX
などとするのに比べて定義に必要なバイト数が少ないため,
-1つのパーツを何度も使いまわす(従って定義したい).
-2倍, 4倍操作が必要.
という場合に短縮につながる場合が多いです. ~
使いこなすのに少し練習が必要で, 同じ関数で実装しても1Bロ...
事例が多いようなので, コンテスト問題などでしっかり練習し...
----
最後に, X[1]Xの形の関数が特に有効なのは
-[1]がパーツとしてよく現れる.
-4倍操作が出てくる.
場合の話であることを強調しておきましょう. ~
単にssが多く出てきて, さらに2倍関数を使う, などの場合には...
有効ということもありえます. XssX特有の旨みは, 4倍して初め...
パーツと2倍関数を兼ねる関数では, X[1]Xの形が最重要である...
その他の関数の方が有利ということも多いので, 慎重に手法を...
終了行:
*特殊な2倍関数 [#gf9854a5]
Herbertは,4つの移動方向を持つという意味で,4という数は少...
例えば特定の動作を4回繰り返し,さらにはそれをさらに向きを...
そこそこ頻繁に要求されるように思います.
4倍すべきものが何かの2倍だったりすることも多く,~
4倍したいけど2倍関数を用意しておく方が賢い場面はしばしば...
実際,
f(X):XXXX
f(p)
と
f(X):XX
f(f(p))
では後者の方が少ないんですよね.4倍を3回やると4倍関数の方...
小回りが利く2倍関数は重要です.
----
いきなりですが,田の字を描く次のコードを見てみましょう.
f(X):XX
f(f(f(f(sr))r))
4倍したものを,向きを変えてさらに4倍しています.
この動きとほぼ同じ動きを,同byte数の別のコードでも書くこ...
f(X):XrX
f(f(f(f(s))r))
動き終わった際の向きが違います("r"が足りない)が,同じ経...
2倍関数に方向転換を織り交ぜてあるため,関数の定義自体は1b...
実行ラインで1byteの得をしており,合計で同じbyte数のコード...
なお,「2倍関数に方向転換を混ぜる」という発想でf(X):XXrな...
定義するという発想もありそうですが,この関数で同経路を辿...
実はXXrやrXXなどの関数は,「4倍を作る」のには向いていませ...
"r"の位置を少し変えただけで大きく性質が変わって不思議な感...
これについては変数変換の講でも触れようと考えています.
逆に言うと今回の2倍関数f(X):XrXは4倍操作との相性が良いで...
より一般的に,''f(X):XpXの形の2倍関数は4倍操作との相性が...
具体的には,f(f(X))と2回合成すると,
w(w(X))=XpXpXpX
となって,"Xp"の''4倍からpだけ足りない''ものが出てきます.~
w(X):XrX,w(w(w(w(s))r))というコードで,田を描くことや元の...
上の例では活用できていませんが, 通常の2倍関数と比べ, srsl...
----
この形のテクニックで筆者が最初に利用し始めたのが, XrXやXl...
それ以上によく用いられるのが,
f(X):XssX
や
f(X):XsrslX
などの関数です. この場合,
f()
としてssやsrslのよく現れるパーツを作れることが強みで,
a:ss
f(X):XX
などとするのに比べて定義に必要なバイト数が少ないため,
-1つのパーツを何度も使いまわす(従って定義したい).
-2倍, 4倍操作が必要.
という場合に短縮につながる場合が多いです. ~
使いこなすのに少し練習が必要で, 同じ関数で実装しても1Bロ...
事例が多いようなので, コンテスト問題などでしっかり練習し...
----
最後に, X[1]Xの形の関数が特に有効なのは
-[1]がパーツとしてよく現れる.
-4倍操作が出てくる.
場合の話であることを強調しておきましょう. ~
単にssが多く出てきて, さらに2倍関数を使う, などの場合には...
有効ということもありえます. XssX特有の旨みは, 4倍して初め...
パーツと2倍関数を兼ねる関数では, X[1]Xの形が最重要である...
その他の関数の方が有利ということも多いので, 慎重に手法を...
ページ名: