Esempio n. 1
0
 /// <inheritdoc />
 public override void SetValue(MutableCubieCube cube, ushort newValue) => cube.set_corners(newValue);
Esempio n. 2
0
 public abstract void SetValue(MutableCubieCube cube, ushort newValue);
Esempio n. 3
0
 /// <inheritdoc />
 public override void SetValue(MutableCubieCube cube, ushort newValue) => cube.set_slice_sorted(newValue);
Esempio n. 4
0
 /// <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);
        }