おもにBLD

スピードキューブ、特に Blindfolded (BLD) の記事を書きます。

Twitterで突如流行ったワードを紹介する:「フローティングバッファ」

こんばんは、酢酸ことSakakiです。

Twitterで公開された知見や流行ったワードを記事にするシリーズ、今回のテーマは「フローティングバッファ」です。私自身が活用できている技術ではないですし、これはとりあえずどんなものかを知ってもらうための記事なので、端的にまとめます。

はじめに

ひとまず、Cube Voyageの BLD用語集 | Cube Voyage から引用します。

Floating Buffer(マルチバッファ)
バッファを一箇所に定めず、場合により別の場所をバッファとして用いる解法。海外ではFloating Bufferと呼ばれるが、日本ではマルチバッファと呼ばれることが多い。

バッファが最初から揃ってしまっている場合やループが細かく切れている場合などは、マルチバッファを用いれば実行の量を減らせるというメリットがある。しかし、その分記憶と実行が複雑になる。

また、解法によってはシステム上そもそもマルチバッファが使用不可能なものもある。

上記の通り、フローティングバッファのメリットは 実行の量を減らせる ことです。また、言い換えになりますが、覚えるべき文字数を減らすことができます。これにより、音記憶がしやすくなる可能性があります。

デメリットは、 記憶と実行が複雑になる ことです。具体的には、記憶はどのバッファでの文字列かを覚えおく必要性が生じること、実行は使えるようにしておく必要のある手順数が増えることが難しい点です。

この記事では、以下のサンプルスクランブルを通して、フローティングバッファを行う際の分析と実行が具体的にどうなるのかについて説明します。

スクランブル

[y2 x':[S, R'F'R]] [R'FR, S]

結論としては、このスクランブルは通常の解法だと6文字(3手順)なのに対し、フローティングバッファを使うと4文字(2手順)になります。

alg.cubing.net

f:id:sak_3x3x3:20210321225510p:plain

通常の解法

比較のため、まずは通常の分析をしてみましょう。バッファはUFとします。ナンバリングは私のものを使いますが、重要なのはナンバリングそのものではなく文字数なので、読む上ではあまり支障はないと思います。

分析

最初に、UFを見て、UL(ち)、RU(い)と進み、UFバッファの白緑に到達したので1ループ目が終わります。

次に、どこかからループを始めますが、説明の都合上UBステッカーから始めます。

UB、FL、RF、UB。私のナンバリングでは「すたあす」となります。

よって、このスクランブルは「ちいすたあす」の6文字であることが分かりました。

記憶

「ちいすたあす」の6文字を記憶します。

実行

3手順です。

  1. 「ちい」 UF-UL-RU [S, R' F R]

  2. 「すた」 UF-UB-FL [L U: [S', L2]]

  3. 「あす」 UF-RF-UB [U': [L E' L', U2]]

フローティングバッファを使った解法

この例では、通常バッファUF、フローティングバッファUBとします。

分析

1ループ目は通常バッファ(UF)から分析するので同じです。

「ちい」

1ループ目が終わった時、パリティが無いスクランブルで以下の条件を全て満たしている場合にフローティングバッファを利用できます。

  • それまでに分析した文字列が偶数文字である
  • それまでの分析のバッファと同じ向きでループが終了した

もし「同じ向き」という表現を初めて見たのでしたら、以下の記事を読むと理解が深まると思います。

DBのEOに気付くためのねじれ合わせ分析 - おもにBLD

なぜバッファと同じ向きである必要があるかは、少し長くなるのでこの記事の最後に書きます。また、パリティの場合にフローティングバッファを使う時の注意も、記事の最後に書きます。

Exampleの分析に戻りまして、次に、UBをバッファにして分析します。UBの位置にあるステッカーはFL「た」、「た」の位置にあるステッカーはRF「あ」、「あ」の位置にあるステッカーはUB(バッファ)。これで2ループ目が完了です。

最終的に、分析文字列は

「ちい」

(UBの)「たあ」

の4文字になりました。通常時に比べて、新ループの開始時と終了時に加えていた文字が無いので2文字ぶん削減できています。

以上を図で表すとこうなります。

f:id:sak_3x3x3:20210323005709p:plain

記憶

「ちい」

(UBの)「たあ」

「たあ」はUBバッファであることを覚えておく必要があります。

実行

  1. 「ちい」 UF-UL-RU [S, R' F R]

  2. (UBの)「たあ」 UB-FL-RF [L' U' L, E']

もしくは、フローティングバッファはループが独立しているので、フローティングバッファのループから実行することも可能です。

  1. (UBの)「たあ」 UB-FL-RF [L' U' L, E']

  2. 「ちい」 UF-UL-RU [S, R' F R]

有識者として、まっさんさんのツイートを引用します。

手順数

通常のエッジ3-styleが22 * 20 = 440 手順なのに対し、エッジフローティングバッファ用の2つ目のバッファの手順は20 * 18 = 360手順です。

以下同様に、バッファを増やすたびにそれまで学んだバッファ絡みの手順は学ばなくてよくなるので、追加で覚える手順数は少なくなっていきます。

f:id:sak_3x3x3:20210321232241p:plain

コーナーも合わせると、全手順数は2768手順です。数だけを見ると膨大ですが、3-styleは理論と規則性がありますし、U面バッファの手順はお互いに似ている部分があるので手順数から受ける印象よりは楽かもしれません。

また、フローティングバッファとして使えるかは置いておくと、BLDでバッファ移行を経験した人は2つのバッファの手順を覚えたことがあるわけで、440 + 360 + 378 + 270 = 1448 手順は覚えたことがあるという計算になります。

実際にはU面を優先してフローティングバッファを増やしていくべきなのでDF手順をいきなり全部使えるわけではないですが、手順数の経験だけ見ると、フローティングバッファに必要な手順数の半分の数を手順を覚えてきたことになります。バッファ移行を経験した方々、なんだかいけそうな気がしてきませんか。

ちなみに、まっさんさんは2200/2768手順くらい覚えているとのこと。さすがですね。

なお、speed-optimalを追求しないならば、そうでなければ既に知っている手順を別のバッファの手順として使うという手もあります。例えば、UFの3-styleを知っていれば、UBはU2、DBはM2、FRはxy持ち替えをすればよいです。

練習方法

hinemosをぜひご利用ください。

2020年版・挫折しない3-style習得法 with hinemos - おもにBLD

関連リンク

以下のリンクからいくつかの動画や記事に飛べるのでより詳しく知りたい方はそちらをご覧ください。

bld-life.com

おわりに

フローティングバッファのことがわかりましたでしょうか。手順を増やせば増やすほど速く解けるようになるのはスピードキューブの基本原理ですし、もし分析・記憶での伸びに停滞を感じたらフローティングバッファを導入するのが一つの手かもしれませんね。

なお、私はそもそもFU/UFR手順をまだ全てに覚えていませんし、それが終わったとしても5BLDの 3-style 2204手順*1を優先するので、少なくとも当分の間はフローティングバッファを導入する予定はありません。

謝辞

記事を書くにあたり、Twitter: @ms3bfさんとTwitter: @SqUarE_3BLDさんにレビューをしていただきました。私自身がフローティングバッファをやっているわけではないため抜けていた観点があり、レビューによりいくつもの気付きを得ることができました。ありがとうございました。

補足

補足1: ループ終了時のバッファの向きが重要な理由

フローティングバッファを使える条件の1つである、「バッファと同じ向きでループが終了した」という条件について、理由を説明します。

もしバッファと違う向きで終了した場合には、そこまで実行が終わった段階で元のバッファがEO反転した状態になります。

必ずEOは偶数個出現するので、元々EOの無いスクランブルの場合、元のバッファがEO反転した状態でフローティングバッファを実行すると、フローティングバッファもEO反転します。

そうすると、本来やる必要のなかったEO解消が必要となり、時間のロスになります。これでは、何のためにフローティングバッファをしたのかわかりません。

よって、フローティングバッファをする際には元のバッファがEO反転しないでループが完了することが必要です。

補足2: 1EO

もしスクランブルに元々1EOがあり、元バッファが反転しない状態でループが完了してフローティングバッファを使うことを決断した場合、必ずEOは偶数個出現するため最終的にフローティングバッファがEO反転した状態で終わることになります。

これに対処するには、フローティングバッファ絡みのEO手順を覚えておくか、あるいはフローティングバッファの分析の中でEOを挟み込んで、3-style1手順ぶんの追加で解決すればよいです。

EO挟み込み*2については、以下にリンクがまとまっています。

ルービックキューブ目隠し|EO【リンク集】 - BLDライフ

補足3: パリティがある場合

この記事で紹介したのはパリティが無いスクランブルでしたが、パリティがある場合には以下の条件が追加で必要になります。

  • エッジが交換分析済みである (= 必ず偶数文字になる)
  • コーナーのフローティングバッファをするなら、起こり得るパリティ手順(2e2c)とCO手順を使えるようにしておく (フロート先が奇数文字になったりCOが残ったりするため)

補足4: MBLDでは使えない

ECEC順で分析・実行する場合に、分析段階でパリティがあるかどうかが分からないのでフローティングバッファは使うことができません。

フローティングバッファの代わりにweak-swapを練習しましょう。このテクニックは追加手順要らずです。

weak-swapについては以下の記事で少し紹介しています。 UF/UFRバッファ(およびFU/UFRバッファ)のメリット - おもにBLD

補足5: FUバッファの場合

通常FUバッファの場合、UBパーツについては他の人と同じようにUBステッカーをバッファにしたほうがよいと思います。理由は以下の2点です。

  • BUだと背面なので分析しにくい
  • 経験のあるDFバッファからM2の関係にある

一方、U面のフローティングバッファとして、サイドのUR, ULパーツについてはUR, ULを選ぶか、FUに合わせて側面のステッカーを選ぶかは迷うところです。

FUに合わせてRU, LUを選ぶのが良さそうに思えていますが、実際に手順を見ながらFUにセットアップして考える手順とUBにセットアップして考える手順の数を比較して数値的な判断を下したいので、今は保留しておきます。

D面はM2法でやっていたDFに合わせたほうがいいので、UFバッファの人と同じくDF, DB, DR, DLでしょうか。

*1:440+440+506+440+378=2204

*2:英語では "cycle break" や "breaking method" と呼ばれています