/// <inheritdoc /> public override void SetValue(MutableCubieCube cube, ushort newValue) => cube.set_corners(newValue);
public abstract void SetValue(MutableCubieCube cube, ushort newValue);
/// <inheritdoc /> public override void SetValue(MutableCubieCube cube, ushort newValue) => cube.set_slice_sorted(newValue);
/// <inheritdoc /> public override void SetValue(MutableCubieCube cube, ushort newValue) => cube.set_ud_edges(newValue);
/// <inheritdoc /> public override ushort[] Create() { var cU = SolvedCube.Instance.Clone(); var cD = SolvedCube.Instance.Clone(); var cUdEdgePositions = SolvedCube.Instance.EdgePositions.ToArray(); var cnt = 0; var table = new ushort[Definitions.NUEdgesPhase2 * Definitions.NPerm4]; for (var i = 0; i < Definitions.NUEdgesPhase2; i++) { cU.set_u_edges(i); for (var j = 0; j < Definitions.NChoose84; j++) { cD.set_d_edges(j * Definitions.NPerm4); var invalid = false; foreach (var e in UdEdges.Cast <int>()) { Edge position; if (UEdges.Contains(cU.EdgePositions[e])) { position = cU.EdgePositions[e]; } else if (DEdges.Contains(cD.EdgePositions[e])) { position = cD.EdgePositions[e]; } else { invalid = true; break; } cUdEdgePositions[e] = position; } //TODO not sure why this is necessary if (invalid) { continue; } for (var k = 0; k < Definitions.NPerm4; k++) { cD.set_d_edges(j * Definitions.NPerm4 + k); foreach (var e in UdEdges.Cast <int>()) { if (UEdges.Contains(cU.EdgePositions[e])) { cUdEdgePositions[e] = cU.EdgePositions[e]; } else if (DEdges.Contains(cD.EdgePositions[e])) { cUdEdgePositions[e] = cD.EdgePositions[e]; } } var cube = new MutableCubieCube(SolvedCube.Instance.CornerPositions.ToArray(), SolvedCube.Instance.CornerOrientations.ToArray(), cUdEdgePositions, SolvedCube.Instance.EdgeOrientations.ToArray()); table[Definitions.NPerm4 * i + k] = cube.get_ud_edges(); cnt += 1; if (cnt % 2000 == 0) { Console.Write("."); } } } } return(table); }