Qter Docs

Orientation and Parity Sharing

Lets examine a real Qter architecture, for example the 90/90 one:

Now let’s blind-trace the cube positions:

From here, we can calculate the orders of each register. has cycles of length with LCM , and has cycles with LCM . However, we can see that both cycles twist the DBL corner! This is not good for the cycles being independently decodable. However, what we can do is ignore that one piece when calculating cycle lengths and performing “solved-goto” instructions. Without that shared piece, we get that has cycles still with LCM and has cycles still with LCM .

Why would we need to share pieces? The fundamental reason is due to the orientation and parity constraints described previously. You’ve seen that having a non-zero orientation sum allows the lengths of cycles to be extended beyond what they might otherwise be, however that net orientation needs to be cancelled out elsewhere to ensure that the orientation sum of the whole puzzle remains zero. For example, for the register , the on DBL cancels out the on that 15 cycle.

It’s possible for us to use the same piece across different registers to cancel out orientation, allowing more pieces to be used for storing data. We call this orientation sharing, and the pieces that are shared are called shared pieces. We can also use sharing to cancel out parity. For both and , all of the cycles that contribute to the order have even parity, meaning that parity doesn’t need to be cancelled out. However if they had odd parity, then we could share two pieces that can be swapped to cancel out parity. We call that parity sharing.

Note that it would actually be possible for all of the DBL, UFR, UF, and RD pieces to be shared and the cycles would still work; it just happens that they aren’t. If they were shared, then there could be the possibility of a shorter algorithm to produce a cycle, but at the cost of the ability to use those pieces to detect whether the register is divisible by two or three.