Project

General

Profile

Download (7.1 KB) Statistics
| Branch: | Tag: | Revision:

magiccube / src / main / java / org / distorted / solvers / cube3 / SolverFaceCube.java @ ac1900c3

1
///////////////////////////////////////////////////////////////////////////////////////////////////
2
// Copyright 2008 Leszek Koltunski                                                               //
3
//                                                                                               //
4
// This file is part of Magic Cube.                                                              //
5
//                                                                                               //
6
// Magic Cube is free software: you can redistribute it and/or modify                            //
7
// it under the terms of the GNU General Public License as published by                          //
8
// the Free Software Foundation, either version 2 of the License, or                             //
9
// (at your option) any later version.                                                           //
10
//                                                                                               //
11
// Magic Cube is distributed in the hope that it will be useful,                                 //
12
// but WITHOUT ANY WARRANTY; without even the implied warranty of                                //
13
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                                 //
14
// GNU General Public License for more details.                                                  //
15
//                                                                                               //
16
// You should have received a copy of the GNU General Public License                             //
17
// along with Magic Cube.  If not, see <http://www.gnu.org/licenses/>.                           //
18
///////////////////////////////////////////////////////////////////////////////////////////////////
19

    
20
package org.distorted.solvers.cube3;
21

    
22
///////////////////////////////////////////////////////////////////////////////////////////////////
23

    
24
class SolverFaceCube
25
{
26
	public int[] f = new int[54];
27

    
28
	// Map the corner positions to facelet positions. cornerFacelet[URF.ordinal()][0] e.g. gives the position of the
29
	// facelet in the URF corner position, which defines the orientation.
30
	// cornerFacelet[URF.ordinal()][1] and cornerFacelet[URF.ordinal()][2] give the position of the other two facelets
31
	// of the URF corner (clockwise).
32
	final static int[][] cornerFacelet =
33
          { { SolverFacelet.U9, SolverFacelet.R1, SolverFacelet.F3 }, { SolverFacelet.U7, SolverFacelet.F1, SolverFacelet.L3 },
34
            { SolverFacelet.U1, SolverFacelet.L1, SolverFacelet.B3 }, { SolverFacelet.U3, SolverFacelet.B1, SolverFacelet.R3 },
35
	          { SolverFacelet.D3, SolverFacelet.F9, SolverFacelet.R7 }, { SolverFacelet.D1, SolverFacelet.L9, SolverFacelet.F7 },
36
            { SolverFacelet.D7, SolverFacelet.B9, SolverFacelet.L7 }, { SolverFacelet.D9, SolverFacelet.R9, SolverFacelet.B7 } };
37

    
38
	// Map the edge positions to facelet positions. edgeFacelet[UR.ordinal()][0] e.g. gives the position of the facelet in
39
	// the UR edge position, which defines the orientation.
40
	// edgeFacelet[UR.ordinal()][1] gives the position of the other facelet
41
	final static int[][] edgeFacelet =
42
          { { SolverFacelet.U6, SolverFacelet.R2 }, { SolverFacelet.U8, SolverFacelet.F2 }, { SolverFacelet.U4, SolverFacelet.L2 },
43
            { SolverFacelet.U2, SolverFacelet.B2 }, { SolverFacelet.D6, SolverFacelet.R8 }, { SolverFacelet.D2, SolverFacelet.F8 },
44
	          { SolverFacelet.D4, SolverFacelet.L8 }, { SolverFacelet.D8, SolverFacelet.B8 }, { SolverFacelet.F6, SolverFacelet.R4 },
45
            { SolverFacelet.F4, SolverFacelet.L6 }, { SolverFacelet.B6, SolverFacelet.L4 }, { SolverFacelet.B4, SolverFacelet.R6 } };
46

    
47
	// Map the corner positions to facelet colors.
48
	final static int[][] cornerColor =
49
          { { SolverColor.U, SolverColor.R, SolverColor.F }, { SolverColor.U, SolverColor.F, SolverColor.L },
50
            { SolverColor.U, SolverColor.L, SolverColor.B }, { SolverColor.U, SolverColor.B, SolverColor.R },
51
            { SolverColor.D, SolverColor.F, SolverColor.R }, { SolverColor.D, SolverColor.L, SolverColor.F },
52
	          { SolverColor.D, SolverColor.B, SolverColor.L }, { SolverColor.D, SolverColor.R, SolverColor.B } };
53

    
54
	// Map the edge positions to facelet colors.
55
	final static int[][] edgeColor =
56
          { { SolverColor.U, SolverColor.R }, { SolverColor.U, SolverColor.F }, { SolverColor.U, SolverColor.L },
57
            { SolverColor.U, SolverColor.B }, { SolverColor.D, SolverColor.R }, { SolverColor.D, SolverColor.F },
58
            { SolverColor.D, SolverColor.L }, { SolverColor.D, SolverColor.B }, { SolverColor.F, SolverColor.R },
59
            { SolverColor.F, SolverColor.L }, { SolverColor.B, SolverColor.L }, { SolverColor.B, SolverColor.R } };
60

    
61
///////////////////////////////////////////////////////////////////////////////////////////////////
62

    
63
	SolverFaceCube()
64
    {
65
	  String s = "UUUUUUUUURRRRRRRRRFFFFFFFFFDDDDDDDDDLLLLLLLLLBBBBBBBBB";
66

    
67
    for( int i=0; i<54; i++)
68
	    f[i] = SolverColor.toInt(s.substring(i, i + 1));
69
	  }
70

    
71
///////////////////////////////////////////////////////////////////////////////////////////////////
72
// Construct a facelet cube from a string
73

    
74
	SolverFaceCube(String cubeString)
75
    {
76
	  for( int i=0; i<cubeString.length(); i++)
77
	    f[i] = SolverColor.toInt(cubeString.substring(i, i + 1));
78
	  }
79

    
80
///////////////////////////////////////////////////////////////////////////////////////////////////
81
// Gives string representation of a facelet cube
82

    
83
	String to_String()
84
    {
85
	  String s = "";
86

    
87
	  for (int i = 0; i < 54; i++)
88
	    s += SolverColor.toString(f[i]);
89

    
90
    return s;
91
	  }
92

    
93
///////////////////////////////////////////////////////////////////////////////////////////////////
94
// Gives CubieCube representation of a faceletcube
95

    
96
	SolverCubieCube toCubieCube()
97
    {
98
	  byte ori;
99
	  SolverCubieCube ccRet = new SolverCubieCube();
100
		
101
    for( int i=0; i< 8; i++) ccRet.cp[i] = SolverCorner.URF; // invalidate corners
102
	  for( int i=0; i<12; i++) ccRet.ep[i] = SolverEdge.UR;    // and edges
103

    
104
	  int col1, col2;
105

    
106
	  for(int i = SolverCorner.URF; i<= SolverCorner.DRB; i++)
107
      {
108
	    // get the colors of the cubie at corner i, starting with U/D
109
	    for (ori = 0; ori < 3; ori++)
110
	      if (f[cornerFacelet[i][ori]] == SolverColor.U || f[cornerFacelet[i][ori]] == SolverColor.D)
111
		      break;
112

    
113
	    col1 = f[cornerFacelet[i][(ori+1)%3]];
114
	    col2 = f[cornerFacelet[i][(ori+2)%3]];
115

    
116
	    for(int j = SolverCorner.URF; j<= SolverCorner.DRB; j++)
117
        {
118
	      if( col1==cornerColor[j][1] && col2==cornerColor[j][2])
119
          {
120
		      // in cornerposition i we have cornercubie j
121
		      ccRet.cp[i] = j;
122
		      ccRet.co[i] = (byte) (ori % 3);
123
		      break;
124
		      }
125
	      }
126
	    }
127

    
128
    for(int i = SolverEdge.UR; i<= SolverEdge.BR; i++)
129
      {
130
	    for(int j = SolverEdge.UR; j<= SolverEdge.BR; j++)
131
        {
132
        if( f[edgeFacelet[i][0]]==edgeColor[j][0] && f[edgeFacelet[i][1]]==edgeColor[j][1])
133
          {
134
		      ccRet.ep[i] = j;
135
		      ccRet.eo[i] = 0;
136
		      break;
137
		      }
138
        if( f[edgeFacelet[i][0]]==edgeColor[j][1] && f[edgeFacelet[i][1]]==edgeColor[j][0])
139
          {
140
		      ccRet.ep[i] = j;
141
		      ccRet.eo[i] = 1;
142
		      break;
143
          }
144
	      }
145
	    }
146

    
147
	return ccRet;
148
	}
149
}
(6-6/8)