有理数の成長速度2
をテンプレートにして作成
[
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
メニュー
]
開始行:
*有理数の成長速度2 [#kbb83e95]
[[有理数の成長速度]]の原理の応用で, 通称''12B構文''と呼ば...
今回も説明のため, 小数や分数の数値を用いることにします. ~
いきなりですが, 次のコードを見てみてください:
a(T):sa(T-1)ra(T+10.25)
a(11)
まず[s11個]が実行されたあと, a(T+10.25)の「おかわり」でa(...
さらに[s12個]が実行されたあとa(11.5)が呼び出されます. 続...
> a(11) → a(11.25) → a(10.50) → a(10.75) → a(11)
> [s11個] r → [s12個] r → [s11個] r → [s11個] r
となり, ここでループに入ります. 結果として,
> [11, 12, 11, 11]
という周期4の繰り返しを作ることに成功しました. ~
小数ではHOJで上手く動かないので, 実際のコードは全ての数値...
a(T):sa(T-4)ra(T+41)
a(44)
のようになります. 初めてこの構文を見る人はEditなどで動か...
#ref(12B_1.png,nolink)
----
今度は数値を変えてみましょう. やはり小数を使って説明しま...
a(T):sa(T-1)ra(T+10.4)
a(11)
どういう数列が現れるか分かりますか??
> 11 11.4 10.8 11.2 10.6 11
となって周期5でもとに戻り, 結果として
> [11,12,11,12,11]
の繰り返しが得られます. 当然HOJで動くコードは
a(T):sa(T-5)ra(T+52)
a(55)
ですね.
#ref(12B_2.png,nolink)
----
さてさて, 上記で紹介した2つのコード
a(T):sa(T-4)ra(T+41)
a(44)
a(T):sa(T-5)ra(T+52)
a(55)
の数値設定の意味について理解を深めておくと, かなり自在に...
例えば
>[5,6,6,5,6,5,6]
という周期7の繰り返しを実現するには?という状況で簡単に数...
まず上の具体例をよく観察してみましょう. ~
初期値a(44), a(55)などは「どのような繰り返しになるか」と...
例えばa(1)にしても(ちょっと違う向きにはなるけど)同じ挙...
そこで他の数値に注目します:
|T-4|T+41|[11,12,11,11]|
|T-5|T+52|[11,12,11,12,11]|
規則は分かりますか?結論から言うと,
> ''a(T):[x]a(T-A)[y]a(T+B)''という数値設定をした場合, ''...
そのA回のあいだに''A+B個の[x]''が配置される.
というのが規則です. 例えば後者の例で考えると, T+52がちょ...
結局数値を260足していることになり, それに応じて「数値を5...
さらにもう引けなくなったときの「数値を消費しないのに配置...
結局周期中にA+B個のsが配置されるというわけです.
----
数値設定の原理が理解できると, 例えば上の[5,6,6,5,6,5,6]の...
a(T):sa(T-7)ra(T+32)
のようなコードを書けば良いと分かるはずです. ~
あとは初期値の設定ですが...これはややこしいので色々試して...
コードを実行すると, 初項に応じて適切な回数sを実行したあと...
周期のどこかに突入します. ~
周期のどの部分が, mod 7でのどの値に対応するかを理論的に調...
masの理解では結構大変です(少なくとも自分の理解では).~
----
もちろん作れる数列には制限があります. まず255を超える数値...
a(T):sa(T-100)ra(T+199)
などの数値設定であっても直接は255以上の数値設定が出てきて...
> これ以上100を引けなくなると199を足す
というルールなので, 最大で100+199=299の数値が出てきてしま...
もう1つの制限として, ''ある程度偏りのない数列しか実現でき...
(数学的思考が苦手でない人は想像してもらえればよいですが,~
等差数列の整数部分の差分を拾っていった数列なので大体平等...
例えば
> [3,3,5], [3,3,5]
のように値が飛ぶものは(そのままでは)作れません. また,
> [2,2,3,3], [2,2,3,3]
のように, 値が大きい地帯と小さい地帯の偏りがある分離する...
前者の例でいくと,周期3の中に11を均等に配分すると3,3,5で...
> [3,4,4], [3,4,4]
のようになってしまいますし, 後者の例でいくと, 周期4の中に...
> [2,3,2,3], [2,3,2,3]
のようになってしまいます. ~
それぞれ12B構文の変形で実現する方法がありますが, それはま...
----
以上で構文の基本説明は終わりますが, 結局12B構文で描ける''...
いろいろEditなどで試してみてください. 偏りの少ない長さを4...
多くの場合,正方形にかなり近いものになります.~
数値設定を上手くすると, 平均的なもの以上に派手な動きをし...
これは無理やり4方向に偏りを強調することで, (同じ場所をう...
特定の方向に進んでいくというものです. 最初にあげた「12,11...
【画像?】
----
このように正方形が1方向に進行していくというものもあります...
アイデアを分かりやすくするため,小数で説明します.
a(T):sa(T-1)ra(T+10.250001)
(このままだと数値が255を超えますが,説明のためということ...
もちろん,「約10.25」を意識した数値設定です.そのためこれ...
a(T):sa(T-1)ra(T+10.25)
の場合とかなり近い挙動を示します. 「0.000001」の誤差が関...
「T+10.250001」が1000000回呼び出された後で, そこで初めて1...
結果として, ''基本的には正方形を描いて1方向に進む''が, ''...
パターンが1つズレて進行方向が変わる''という現象が生じます.
実際にHOJ上で動くコードで確かめてみましょう.~
ポイントは10.250001のように, 1/4に非常に近い有理数(ある...
具体的には「A/(4A±1)」という有理数に整数を加えたものを用...
例えば「83/37」という分数を利用して
a(T):sa(T-37)ra(T+83)
というコードを(適当な初項を与えて)実行してみてください.
#ref(12B_3.png,nolink)
正方形から正方形を繰り抜いた形をぐるぐる回っていますね?
この構文では最も特徴的で汎用性がある形だと思います.
この形が使える問題も結構ありますので探してみてください!
----
以上で説明したのが, 通称''12B構文''と呼ばれる有名構文で, ...
a(T):sa(T-A)ra(T-B)
a(C)
と書くのが基本構文です. どんな数値を入れても12Bであり, 他...
12Bでは描けないような特徴的な形を描くため, 12B構文と呼ば...
もちろんsとrである必要はなく, 一般形は
a(T):[x]a(T-A)[y]a(T-B)
となります. [x]と[y]がs,rのように1バイトずつじゃない場合...
12バイトにはなりませんが, この場合も12B構文と呼ぶことが多...
a(T):srsla(T-A)la(T-B)
a(T):ssa(T-A)ra(T-B)
などの変種ですっきり実装できる問題もあります. ~
どんどん応用して12B構文マスターを目指してください!
----
執筆:mas
終了行:
*有理数の成長速度2 [#kbb83e95]
[[有理数の成長速度]]の原理の応用で, 通称''12B構文''と呼ば...
今回も説明のため, 小数や分数の数値を用いることにします. ~
いきなりですが, 次のコードを見てみてください:
a(T):sa(T-1)ra(T+10.25)
a(11)
まず[s11個]が実行されたあと, a(T+10.25)の「おかわり」でa(...
さらに[s12個]が実行されたあとa(11.5)が呼び出されます. 続...
> a(11) → a(11.25) → a(10.50) → a(10.75) → a(11)
> [s11個] r → [s12個] r → [s11個] r → [s11個] r
となり, ここでループに入ります. 結果として,
> [11, 12, 11, 11]
という周期4の繰り返しを作ることに成功しました. ~
小数ではHOJで上手く動かないので, 実際のコードは全ての数値...
a(T):sa(T-4)ra(T+41)
a(44)
のようになります. 初めてこの構文を見る人はEditなどで動か...
#ref(12B_1.png,nolink)
----
今度は数値を変えてみましょう. やはり小数を使って説明しま...
a(T):sa(T-1)ra(T+10.4)
a(11)
どういう数列が現れるか分かりますか??
> 11 11.4 10.8 11.2 10.6 11
となって周期5でもとに戻り, 結果として
> [11,12,11,12,11]
の繰り返しが得られます. 当然HOJで動くコードは
a(T):sa(T-5)ra(T+52)
a(55)
ですね.
#ref(12B_2.png,nolink)
----
さてさて, 上記で紹介した2つのコード
a(T):sa(T-4)ra(T+41)
a(44)
a(T):sa(T-5)ra(T+52)
a(55)
の数値設定の意味について理解を深めておくと, かなり自在に...
例えば
>[5,6,6,5,6,5,6]
という周期7の繰り返しを実現するには?という状況で簡単に数...
まず上の具体例をよく観察してみましょう. ~
初期値a(44), a(55)などは「どのような繰り返しになるか」と...
例えばa(1)にしても(ちょっと違う向きにはなるけど)同じ挙...
そこで他の数値に注目します:
|T-4|T+41|[11,12,11,11]|
|T-5|T+52|[11,12,11,12,11]|
規則は分かりますか?結論から言うと,
> ''a(T):[x]a(T-A)[y]a(T+B)''という数値設定をした場合, ''...
そのA回のあいだに''A+B個の[x]''が配置される.
というのが規則です. 例えば後者の例で考えると, T+52がちょ...
結局数値を260足していることになり, それに応じて「数値を5...
さらにもう引けなくなったときの「数値を消費しないのに配置...
結局周期中にA+B個のsが配置されるというわけです.
----
数値設定の原理が理解できると, 例えば上の[5,6,6,5,6,5,6]の...
a(T):sa(T-7)ra(T+32)
のようなコードを書けば良いと分かるはずです. ~
あとは初期値の設定ですが...これはややこしいので色々試して...
コードを実行すると, 初項に応じて適切な回数sを実行したあと...
周期のどこかに突入します. ~
周期のどの部分が, mod 7でのどの値に対応するかを理論的に調...
masの理解では結構大変です(少なくとも自分の理解では).~
----
もちろん作れる数列には制限があります. まず255を超える数値...
a(T):sa(T-100)ra(T+199)
などの数値設定であっても直接は255以上の数値設定が出てきて...
> これ以上100を引けなくなると199を足す
というルールなので, 最大で100+199=299の数値が出てきてしま...
もう1つの制限として, ''ある程度偏りのない数列しか実現でき...
(数学的思考が苦手でない人は想像してもらえればよいですが,~
等差数列の整数部分の差分を拾っていった数列なので大体平等...
例えば
> [3,3,5], [3,3,5]
のように値が飛ぶものは(そのままでは)作れません. また,
> [2,2,3,3], [2,2,3,3]
のように, 値が大きい地帯と小さい地帯の偏りがある分離する...
前者の例でいくと,周期3の中に11を均等に配分すると3,3,5で...
> [3,4,4], [3,4,4]
のようになってしまいますし, 後者の例でいくと, 周期4の中に...
> [2,3,2,3], [2,3,2,3]
のようになってしまいます. ~
それぞれ12B構文の変形で実現する方法がありますが, それはま...
----
以上で構文の基本説明は終わりますが, 結局12B構文で描ける''...
いろいろEditなどで試してみてください. 偏りの少ない長さを4...
多くの場合,正方形にかなり近いものになります.~
数値設定を上手くすると, 平均的なもの以上に派手な動きをし...
これは無理やり4方向に偏りを強調することで, (同じ場所をう...
特定の方向に進んでいくというものです. 最初にあげた「12,11...
【画像?】
----
このように正方形が1方向に進行していくというものもあります...
アイデアを分かりやすくするため,小数で説明します.
a(T):sa(T-1)ra(T+10.250001)
(このままだと数値が255を超えますが,説明のためということ...
もちろん,「約10.25」を意識した数値設定です.そのためこれ...
a(T):sa(T-1)ra(T+10.25)
の場合とかなり近い挙動を示します. 「0.000001」の誤差が関...
「T+10.250001」が1000000回呼び出された後で, そこで初めて1...
結果として, ''基本的には正方形を描いて1方向に進む''が, ''...
パターンが1つズレて進行方向が変わる''という現象が生じます.
実際にHOJ上で動くコードで確かめてみましょう.~
ポイントは10.250001のように, 1/4に非常に近い有理数(ある...
具体的には「A/(4A±1)」という有理数に整数を加えたものを用...
例えば「83/37」という分数を利用して
a(T):sa(T-37)ra(T+83)
というコードを(適当な初項を与えて)実行してみてください.
#ref(12B_3.png,nolink)
正方形から正方形を繰り抜いた形をぐるぐる回っていますね?
この構文では最も特徴的で汎用性がある形だと思います.
この形が使える問題も結構ありますので探してみてください!
----
以上で説明したのが, 通称''12B構文''と呼ばれる有名構文で, ...
a(T):sa(T-A)ra(T-B)
a(C)
と書くのが基本構文です. どんな数値を入れても12Bであり, 他...
12Bでは描けないような特徴的な形を描くため, 12B構文と呼ば...
もちろんsとrである必要はなく, 一般形は
a(T):[x]a(T-A)[y]a(T-B)
となります. [x]と[y]がs,rのように1バイトずつじゃない場合...
12バイトにはなりませんが, この場合も12B構文と呼ぶことが多...
a(T):srsla(T-A)la(T-B)
a(T):ssa(T-A)ra(T-B)
などの変種ですっきり実装できる問題もあります. ~
どんどん応用して12B構文マスターを目指してください!
----
執筆:mas
ページ名: