Jump to: Overview · 3BLD Algs · Cascading Pseudo/Weak Swap · Edge Stats · Corner Stats · LTCT & T2C · Group Order · Big BLD · Reproduction
All tables generated in runtime. 3BLD: --. Big BLD: --.
Warning: these numbers have not been cross-verified yet and may contain errors — please open a GitHub issue if anything looks off. Full floating examples and CPS examples are working in progress and bugs are expected, so please check back later for updates.
A 3BLD solution decomposes the 12 edges and 8 corners into independent permutation–orientation structures. This tool exhaustively enumerates every cycle configuration and precomputes how many distinct scrambles realise it, giving exact probabilities for any filter.
A cycle configuration is described by the buffer cycle $(p_0, o_0)$ and a list of non-buffer cycle types $(p_j, o_j)*r_j$, where $p_j$ is the cycle length, $o_j$ the net orientation, and $r_j$ the number of cycles of that type.
Here $o$ is the net orientation of a cycle: $o = \bigl(\sum_{\text{cycle}} o_i\bigr) \bmod O$, where $O=2$ for edges and $O=3$ for corners. Orientation values: $0$ = correct, $1$ = flipped (edges) or CW-twisted (corners), $2$ = CCW-twisted (corners). A 3-cycle with $o=0$ is orientation-clean and can be solved by a single 3-style alg. The global constraint $\sum_{\text{all}} o_i \equiv 0\pmod{O}$ always holds.
Each enumerated configuration is exposed as an object whose fields are referenced throughout this page. Non-buffer cycles means all cycles except the buffer cycle.
| Field | Definition |
|---|---|
parity | 0 (even) or 1 (odd) |
breaks | number of non-buffer cycles with $p > 1$ |
closedN ($N=1..5$) | number of non-buffer cycles of type $(N, 0)$ |
openN ($N=1..5$) | number of non-buffer cycles of type $(N, o)$ with $o \neq 0$ |
cwTwist | number of non-buffer corner cycles of type $(1, 1)$ — CW-twisted-in-place corners (corner-only; always 0 for edges) |
ccwTwist | number of non-buffer corner cycles of type $(1, 2)$ — CCW-twisted-in-place corners (corner-only; always 0 for edges) |
alg | alg count under Basic |
algs | alg count under Floating plain 3-cycles |
algFF | alg count under Full Floating |
algFFP | alg count under Full Floating Parity |
count | number of distinct scrambles realising this configuration |
Any valid 3BLD scramble has equal edge and corner permutation parity, so filtering one automatically filters both. Because parity is a top-level filter, configurations are split by parity into two separate weighted pools — an even-parity pool and an odd-parity pool — each with its own CDF weighted by scramble count.
To generate a scramble: if both parities are enabled, pick a pool in proportion to its total weight (so the joint distribution still matches the unfiltered scramble distribution); sample a configuration from that pool's CDF; instantiate a random permutation and orientation assignment matching the configuration; solve the resulting cube state with min2phase.js.
Default = Chichu edge + Speffz-expanded corner, which I've been using. Traditional Chichu users are strongly recommended to switch.
Full Floating notation: (X:)YZ is one floating alg with floating buffer X cycling pieces Y and Z. Pairing is greedy and may be sub-optimal in rare configurations. The execution shown is just trying to match the alg count and does NOT stand for recommended solutions.
| Edges | Corners | |
|---|---|---|
| Parity | ||
| Breaks | ||
| Flip / Twist | ||
| Algs (Basic) | ||
| Algs (Floating plain 3-cycles) | ||
| Algs (Full Floating) | ||
| Algs (Full Floating Parity) | ||
| Count |
If anything doesn't add up, please report the issue on GitHub.
▲ CollapseExact scramble counts for 3BLD with buffers UF (edges, $P=12$, $O=2$) and UFR (corners, $P=8$, $O=3$), over all $980{,}995{,}276{,}800$ edge states and $88{,}179{,}840$ corner states. Select a skill set to see the corresponding alg count distribution.
Skill levels (single-buffer 3-style):
Comparison with Forsthofer & Hiesl (2021). This page assumes full parity on single buffer, which gives less algo count in all categories compared to their results with fixed-pair weak swap. Their parity convention "UR–UF pseudo swap" is the length-1 special case of the cascading pseudo/weak swap (row #1). For BLDers mastering only a fixed edge pair, roughly additional 0.5 algs are expected. But the reality is quite nuanced, since if UF-UR pair is mastered, UF-LU or UF-RB pair is basically mastered for free since they are just one S-slice setup away.
With arbitrary floating 3-cycles, any non-buffer cycle can be reduced systematically in three phases:
For each non-buffer cycle with $p \ge 3$, apply $\lfloor(p-1)/2\rfloor$ floating 3-cycles to shrink it by 2 per step. Orientation $o$ is preserved by a well-chosen cycle. After Phase 1, only $(2,o)$ and $(1,o)$ cycles remain among non-buffer cycles:
Let post-Phase-1 counts be $r_{20},\,r_{21},\,r_{11}$. Reductions are applied in order, each pair costing 2 floating algs:
After Phase 2, at most one residual 2-cycle remains: $R = r_{20} + r_{21} \le 1$. Each contributes $1.5$ algs.
Let post-Phase-1 counts be $r_{20},\,r_{21},\,r_{22},\,r_{11},\,r_{12}$. Reductions are applied in order, each pair costing 2 floating algs:
After Phase 2, at most one residual 2-cycle remains: $R = r_{20} + r_{21} + r_{22} \le 1$. Each contributes $1.5$ algs. (The bookkeeping bucket — $r_{11}$ vs $r_{12}$ — for same-type pairings doesn't affect the final alg count, since the Phase-3 twist formula is symmetric in $r_{11}$ and $r_{12}$.)
Edge 2-flip and 4-flip; corner 2-twist and 3-twist each count as 1 alg.
Total: $\text{twist} + 1.5\,R + (p_0-1)/2$. All arithmetic is done in the $2\times$ form (integers) to avoid float precision issues, then divided by 2.
Note: the reduction above uses a fixed greedy pairing order for simplicity. In some configurations a different pairing strategy could yield a lower alg count, so the statistics presented here should be taken as an upper bound on the true optimum.
When parity is odd and a residual $(2,0)$ remains, it is absorbed into the parity end-pair of the buffer cycle, reducing its cost from $1.5$ to $0.5$ algs — a saving of 1. A residual $(2,1)$ or $(2,2)$ cannot be absorbed cleanly, so it stays at cost $1.5$ and parity yields no saving.
▲ Collapse| Algs | Count | Probability | Cumulative |
|---|
Mean: , Std:
| Algs | Count | Probability | Cumulative |
|---|
Mean: , Std:
| Algs | Count | Probability | Cumulative |
|---|
Mean: , Std:
Mean alg counts by skill level, computed over all valid scramble states:
| Skill Level | Edge mean | Saved | Corner mean | Saved | Total mean | Saved |
|---|---|---|---|---|---|---|
| Basic | ||||||
| Floating plain 3-cycles | ||||||
| Full Floating | ||||||
| Full Floating Parity |
Bruh, would you really want to learn 2,768 full-floating 3-style algs just to save algs per scramble on average, and another 11,088 full-floating parity algs just to save more algs per scramble? These are only theoretical upper bounds, without accounting for human-level practicality. Life is short, be happy :)
To be clear, I am not discouraging floating and I like to improvise floating all the time. I am highlighting the cost-benefit tradeoff. With limited time and energy, more algs mean less mastery per case and more mental overhead.
Distribution of algs saved per scramble by skill level (vs. Basic):
| Saved | Floating plain 3-cycles | Full Floating | Full Floating Parity |
|---|
| Saved | Floating plain 3-cycles | Full Floating | Full Floating Parity |
|---|
| Saved | Floating plain 3-cycles | Full Floating | Full Floating Parity |
|---|
On odd-parity scrambles the solver has to fold a 2-swap (parity alg) into the execution. Cascading Pseudo/Weak Swap avoids learning every possible parity pair: pick a fixed preference order over the 11 non-buffer edge positions, then during memo scan that list and use the first applicable one as the parity target. The smaller the slot index, the more likely the parity case lands inside the small set of pairs you've actually mastered.
It never hurts to run the same routine on even-parity scrambles — the alg count is unchanged. (Unlike a fixed weak swap, which can add an alg when applied unconditionally.) Another small win: the chosen letter is deferred to the final parity swap, so once you've spotted which slot CPS will pick you can drop that letter from the running memo — a small but real saving over fixed weak swap, where you'd say UR's letter regardless.
Hard-coded preference order: AGEDPITXKQYN
MWP = Mid-Way Parity: when a pref letter shows up at an even index inside the buffer cycle (with matching orientation), tag that letter as the parity swap in-place instead of deferring to the end.
Edge flip insertion is commonly integrated with CPS to fold a flipped non-buffer edge into the parity swap, but isn't shown in this demo yet.
This card doesn't fold in floating reductions yet. Combining floating with CPS gets pretty intricate, and so far not many solvers have interests. Anyway let's leave space for arts in 3BLD :)
▲ CollapseWhen a 3BLD scramble has odd parity, the solver must incorporate a 2-swap (parity algorithm) into their execution. The cascading pseudo/weak swap technique resolves parity by designating a fixed preference order among the 11 non-buffer edge positions (e.g., UR first, then UB, UL, …). During memo, the solver checks each preferred position in order until one is applicable — meaning it can serve as the parity-swap target with the buffer.
Forsthofer & Hiesl (2021) use the "UR–UF pseudo swap", which is the length-1 special case of the cascading version below (preference list = {UR}).
For buffer UF, a position X is applicable as a swap target if any of these hold:
Conversely, X is not applicable if:
These two sets are in bijection: swapping the physical UF and X pieces maps each applicable case to the corresponding not-applicable case and vice versa. This gives a clean 50% probability that the first preferred position (index #1) is applicable, regardless of parity. The remaining position at the end of the buffer cycle ($p_0 > 1$) can have either orientation with equal probability, so it contributes half to each side.
Formally, for a cycle configuration with buffer cycle length $p_0$ and $f$ solved-in-place edges among non-buffer cycles:
After the coin flip on $h$, we have $a'$ applicable and $n' = 11 - a'$ not-applicable positions uniformly distributed among the 11 preference slots. The probability that the first applicable slot is at index $k$ is:
$$P(k \mid a', n') \;=\; \frac{a' \cdot n'^{\underline{k-1}}}{11^{\underline{k}}}$$where $x^{\underline{m}} = x(x-1)\cdots(x-m+1)$ is the falling factorial. The — row collects configurations where $a' = 0$ (no applicable target exists).
| Index | Count | Probability | Cumulative |
|---|
Indices #12–#22 represent cases with no applicable position (no edge cycle breaks and ending on a wrong-orientation edge), spread evenly to make the curve continuous.
Same algorithm with corner buffer UFR over 7 non-buffer corner positions. The end-of-buffer-cycle position is applicable with probability $\tfrac{1}{3}$ (instead of $\tfrac{1}{2}$ for edges) since corners have three orientations.
| Index | Count | Probability | Cumulative |
|---|
Indices #8–#21 represent cases with no applicable position, spread evenly across 14 buckets to make the curve continuous.
| Breaks | Count | Probability | Cumulative |
|---|
Mean: , Std:
| Breaks | Count | Probability | Cumulative |
|---|
Mean: , Std:
| Number | Count | Probability | Cumulative |
|---|
Mean: , Std:
Solved-in-place edges (buffer excluded) follow the same distribution by orientation symmetry.
| Number | Count | Probability | Cumulative |
|---|
Mean: , Std:
Probability that a scramble's non-buffer cycles invoke a 4-flip or 3-twist alg. Edge 4-flip: open1>=3. Corner 3-twist: cwTwist>=3 || ccwTwist>=3 || cwTwist==2 && ccwTwist==0 || ccwTwist==2 && cwTwist==0.
| Type | Count | Probability |
|---|---|---|
| Edge 4-flip | ||
| Corner 3-twist |
LTCT (Last Target Corner Twist) combines solving the final corner target with twisting two misoriented corners into a single algorithm, saving one twist alg. It requires odd parity and at least one twisted non-buffer corner (open1>=1).
T2C (Twisted 2 Corners) solves the final corner target when the buffer corner is twisted and two remaining corners are swapped, combining the swap and buffer untwist into one algorithm. It requires odd parity and at least one misoriented non-buffer 2-cycle (open2>=1).
Note: In practice, most BLDers specialize in LTCT or T2C algorithms for a fixed edge pair (e.g., UF–UR), so the actual applicable cases are even fewer—roughly half of those shown above when using cascading pseudo/weak swap.
| Technique | Count | Probability |
|---|---|---|
| LTCT | ||
| T2C |
Every move sequence eventually returns the cube to its start state. The order is the number of repetitions required. The table shows how many distinct cube states (scrambles) have each order.
| Order | Count |
|---|
| Algs | Count | Probability | Cumulative |
|---|
Mean: , Std:
Wing parity counts as 1 alg. Basic floating includes floating pure 3-cycles and one pure 2-cycle for wing parity.
Mean wing alg counts by skill level, computed over all 4x4x4 wing states:
| Skill Level | Mean | Saved |
|---|---|---|
| Basic | ||
| Basic floating | ||
| Full Floating |
Distribution of algs saved per scramble by skill level (vs. Basic):
| Saved | Basic floating | Full Floating |
|---|
| Breaks | Count | Probability | Cumulative |
|---|
Mean: , Std:
| Number | Count | Probability | Cumulative |
|---|
Mean: , Std:
| Number | Count | Probability | Cumulative |
|---|
Mean: , Std:
| Number | Count | Probability | Cumulative |
|---|
Mean: , Std:
| Number | Count | Probability | Cumulative |
|---|
Mean: , Std:
All statistics on this page can be independently verified. Clone the repo and run with Node.js:
git clone https://github.com/helloluxi/bld-scr.git
cd bld-scr
node src/reproduction.js
Requires Node.js ≥ 14 (for BigInt support).