Project

General

Profile

« Previous | Next » 

Revision 478a4c45

Added by Leszek Koltunski over 1 year ago

Progress with Skewb Diamond solver.

View differences:

src/main/java/org/distorted/solvers/SolverSkewbDiamond.java
11 11

  
12 12
import android.content.res.Resources;
13 13

  
14
import org.distorted.main.R;
14 15
import org.distorted.objectlib.main.ObjectType;
15 16
import org.distorted.objectlib.main.TwistyObject;
16 17
import org.distorted.objectlib.tablebases.ImplementedTablebasesList;
......
43 44
  private static final int ERROR_CORNERS_CANNOT   = -18;
44 45

  
45 46
  private TablebasesAbstract mSolver;
47
  private final int[] mFaceColors;
48

  
49
  private static final int[] FREE_CENTERS = {0,2,5,7};
46 50

  
47 51
///////////////////////////////////////////////////////////////////////////////////////////////////
48 52

  
49 53
  public SolverSkewbDiamond(Resources res, TwistyObject object)
50 54
    {
51 55
    super(res,object);
56
    mFaceColors = new int[8];
57
    }
58

  
59
///////////////////////////////////////////////////////////////////////////////////////////////////
60

  
61
  private int retCorner(int[][] corners, int c1, int c2)
62
    {
63
    for(int i=0; i<6; i++)
64
      {
65
      int[] cor = corners[i];
66
      int twist = retCornerTwist(cor,c1,c2);
67
      if( twist>=0 ) return i;
68
      }
69

  
70
    return -1;
71
    }
72

  
73
///////////////////////////////////////////////////////////////////////////////////////////////////
74

  
75
  private int[] getCornersPermutation(int[][] corners)
76
    {
77
    int[] perm = new int[6];
78

  
79
    perm[0] = retCorner(corners,mFaceColors[1],mFaceColors[4]);
80
    perm[1] = retCorner(corners,mFaceColors[1],mFaceColors[6]);
81
    perm[2] = retCorner(corners,mFaceColors[3],mFaceColors[6]);
82
    perm[3] = retCorner(corners,mFaceColors[3],mFaceColors[4]);
83
    perm[4] = retCorner(corners,mFaceColors[1],mFaceColors[3]);
84
    perm[5] = retCorner(corners,mFaceColors[4],mFaceColors[6]);
85

  
86
    return perm;
52 87
    }
53 88

  
54 89
///////////////////////////////////////////////////////////////////////////////////////////////////
55 90

  
56
  private int[] getCornersPermutation(int[] colors, int[][] corners)
91
  private int[] getCornersTwist(int[] corners_perm, int[][] corners)
57 92
    {
93
    int[] twist = new int[6];
94

  
95
    twist[0] = retCornerTwist(corners[corners_perm[0]], mFaceColors[1],mFaceColors[4]);
96
    twist[1] = retCornerTwist(corners[corners_perm[1]], mFaceColors[1],mFaceColors[6]);
97
    twist[2] = retCornerTwist(corners[corners_perm[2]], mFaceColors[3],mFaceColors[6]);
98
    twist[3] = retCornerTwist(corners[corners_perm[3]], mFaceColors[3],mFaceColors[4]);
99
    twist[4] = retCornerTwist(corners[corners_perm[4]], mFaceColors[1],mFaceColors[3]);
100
    twist[5] = retCornerTwist(corners[corners_perm[5]], mFaceColors[4],mFaceColors[6]);
58 101

  
102
    return twist;
59 103
    }
60 104

  
61 105
///////////////////////////////////////////////////////////////////////////////////////////////////
62 106

  
63
  private int[] getCornersTwist(int[] colors, int[][] corners)
107
  private int retCenter(int color, int[] centers)
64 108
    {
109
    for(int i=0; i<4; i++ )
110
      if( centers[FREE_CENTERS[i]]==color ) return i;
65 111

  
112
    return -1;
66 113
    }
67 114

  
68 115
///////////////////////////////////////////////////////////////////////////////////////////////////
69 116

  
70
  private int[] getFreeCentersPermutation(int[] colors, int[] centers)
117
  private int[] getFreeCentersPermutation(int[] centers)
71 118
    {
119
    int[] perm = new int[4];
120

  
121
    for(int i=0; i<4; i++ )
122
      perm[i] = retCenter(mFaceColors[FREE_CENTERS[i]],centers);
72 123

  
124
    return perm;
73 125
    }
74 126

  
75 127
///////////////////////////////////////////////////////////////////////////////////////////////////
......
89 141
    return total;
90 142
    }
91 143

  
144
///////////////////////////////////////////////////////////////////////////////////////////////////
145

  
146
  private int retCornerTwist(int[] corner, int c1, int c2)
147
    {
148
    if( corner[0]==c1 && corner[2]==c2 ) return 1;
149
    if( corner[1]==c1 && corner[3]==c2 ) return 2;
150
    if( corner[2]==c1 && corner[0]==c2 ) return 3;
151
    if( corner[3]==c1 && corner[1]==c2 ) return 0;
152

  
153
    return -1;
154
    }
155

  
92 156
///////////////////////////////////////////////////////////////////////////////////////////////////
93 157

  
94 158
  private int figureOutColor(int[][] corners, int c1, int c2)
......
96 160
    for(int i=0; i<6; i++)
97 161
      {
98 162
      int[] cor = corners[i];
99

  
100
      if( cor[0]==c1 && cor[2]==c2 ) return cor[1];
101
      if( cor[1]==c1 && cor[3]==c2 ) return cor[2];
102
      if( cor[2]==c1 && cor[0]==c2 ) return cor[3];
103
      if( cor[3]==c1 && cor[1]==c2 ) return cor[0];
163
      int twist = retCornerTwist(cor,c1,c2);
164
      if( twist>=0 ) return cor[twist];
104 165
      }
105 166

  
106 167
    return -1;
......
158 219

  
159 220
///////////////////////////////////////////////////////////////////////////////////////////////////
160 221

  
161
  private int checkAllColorsDifferent(int[] colors)
222
  private int checkAllColorsDifferent()
162 223
    {
163 224
    for(int i=0; i<8; i++)
164 225
      {
165 226
      boolean present = false;
166 227

  
167 228
      for(int j=0; j<8; j++)
168
        if( colors[j]==i )
229
        if( mFaceColors[j]==i )
169 230
          {
170 231
          present=true;
171 232
          break;
......
266 327
    {
267 328
    int[][] corners = new int[6][4];
268 329
    int[] centers = new int[8];
269
    int[] face_colors = new int[8];
270 330

  
271 331
    getCorners(object,corners);
272 332
    getCenters(object,centers);
......
274 334
    int result1 = checkAllCentersPresent(centers);
275 335
    if( result1<0 ) return result1;
276 336

  
277
    int result2 = figureOutFaceColors(face_colors,centers,corners);
337
    int result2 = figureOutFaceColors(mFaceColors,centers,corners);
278 338
    if( result2<0 ) return result2;
279 339

  
280
    int result3 = checkAllColorsDifferent(face_colors);
340
    int result3 = checkAllColorsDifferent();
281 341
    if( result3<0 ) return result3;
282 342

  
283
    int[] corners_perm = getCornersPermutation(face_colors, corners);
343
    int[] corners_perm = getCornersPermutation(corners);
284 344
    boolean even1 = TablebaseHelpers.permutationIsEven(corners_perm);
285 345
    if( !even1 ) return ERROR_TWO_CORNERS;
286 346

  
287
    int[] free_centers_perm = getFreeCentersPermutation(face_colors, centers);
347
    int[] free_centers_perm = getFreeCentersPermutation(centers);
288 348
    boolean even2 = TablebaseHelpers.permutationIsEven(free_centers_perm);
289 349
    if( !even2 ) return ERROR_TWO_CENTERS;
290 350

  
291
    int[] corners_twist = getCornersTwist(face_colors, corners);
351
    int[] corners_twist = getCornersTwist(corners_perm, corners);
292 352
    int totalTwist = getTotalTwist(corners_twist);
293 353
    if( totalTwist<0 ) return ERROR_CORNER_TWIST;
294 354

  
......
298 358
    return centers_perm_num + 12*(totalTwist + 128*corners_perm_num);
299 359
    }
300 360

  
361
///////////////////////////////////////////////////////////////////////////////////////////////////
362

  
363
  private int getColorIndex4(int face)
364
    {
365
    switch(mFaceColors[face])
366
      {
367
      case 0: return R.string.color_violet4;
368
      case 1: return R.string.color_grey4;
369
      case 2: return R.string.color_blue4;
370
      case 3: return R.string.color_red4;
371
      case 4: return R.string.color_orange4;
372
      case 5: return R.string.color_green4;
373
      case 6: return R.string.color_white4;
374
      case 7: return R.string.color_yellow4;
375
      }
376

  
377
    return -1;
378
    }
379

  
380
///////////////////////////////////////////////////////////////////////////////////////////////////
381

  
382
  private int getColorIndex3(int face)
383
    {
384
    switch(mFaceColors[face])
385
      {
386
      case 0: return R.string.color_violet3;
387
      case 1: return R.string.color_grey3;
388
      case 2: return R.string.color_blue3;
389
      case 3: return R.string.color_red3;
390
      case 4: return R.string.color_orange3;
391
      case 5: return R.string.color_green3;
392
      case 6: return R.string.color_white3;
393
      case 7: return R.string.color_yellow3;
394
      }
395

  
396
    return -1;
397
    }
398

  
399
///////////////////////////////////////////////////////////////////////////////////////////////////
400

  
401
  private int getColorIndex2(int face)
402
    {
403
    switch(mFaceColors[face])
404
      {
405
      case 0: return R.string.color_violet2;
406
      case 1: return R.string.color_grey2;
407
      case 2: return R.string.color_blue2;
408
      case 3: return R.string.color_red2;
409
      case 4: return R.string.color_orange2;
410
      case 5: return R.string.color_green2;
411
      case 6: return R.string.color_white2;
412
      case 7: return R.string.color_yellow2;
413
      }
414

  
415
    return -1;
416
    }
417

  
418
///////////////////////////////////////////////////////////////////////////////////////////////////
419

  
420
  private String centerError(Resources res, int face)
421
    {
422
    String color = res.getString(getColorIndex2(face));
423
    return res.getString(R.string.solver_generic_missing_center,color);
424
    }
425

  
426
///////////////////////////////////////////////////////////////////////////////////////////////////
427

  
428
  private String cornerError(Resources res, int f1, int f2)
429
    {
430
    String c1 = res.getString(getColorIndex3(f1));
431
    String c2 = res.getString(getColorIndex4(f2));
432
    return res.getString(R.string.solver_generic_missing_corner2,c1,c2);
433
    }
434

  
301 435
///////////////////////////////////////////////////////////////////////////////////////////////////
302 436

  
303 437
  public String error(int index, Resources res)
304 438
    {
305 439
    switch(index)
306 440
      {
307
      case ERROR_CORNER_FR_MISSING:
308
      case ERROR_CORNER_BR_MISSING:
309
      case ERROR_CORNER_BL_MISSING:
310
      case ERROR_CORNER_FL_MISSING:
311
      case ERROR_CORNER_TO_MISSING:
312
      case ERROR_CORNER_BO_MISSING:
313

  
314
      case ERROR_CENTER_0_MISSING :
315
      case ERROR_CENTER_1_MISSING :
316
      case ERROR_CENTER_2_MISSING :
317
      case ERROR_CENTER_3_MISSING :
318
      case ERROR_CENTER_4_MISSING :
319
      case ERROR_CENTER_5_MISSING :
320
      case ERROR_CENTER_6_MISSING :
321
      case ERROR_CENTER_7_MISSING :
322

  
323
      case ERROR_TWO_CORNERS      :
324
      case ERROR_TWO_CENTERS      :
325
      case ERROR_CORNER_TWIST     :
326
      case ERROR_CORNERS_CANNOT   :
441
      case ERROR_CORNER_FR_MISSING: return cornerError(res,1,4);
442
      case ERROR_CORNER_BR_MISSING: return cornerError(res,1,6);
443
      case ERROR_CORNER_BL_MISSING: return cornerError(res,3,6);
444
      case ERROR_CORNER_FL_MISSING: return cornerError(res,3,4);
445
      case ERROR_CORNER_TO_MISSING: return cornerError(res,1,3);
446
      case ERROR_CORNER_BO_MISSING: return cornerError(res,4,6);
447

  
448
      case ERROR_CENTER_0_MISSING : return centerError(res,0);
449
      case ERROR_CENTER_1_MISSING : return centerError(res,1);
450
      case ERROR_CENTER_2_MISSING : return centerError(res,2);
451
      case ERROR_CENTER_3_MISSING : return centerError(res,3);
452
      case ERROR_CENTER_4_MISSING : return centerError(res,4);
453
      case ERROR_CENTER_5_MISSING : return centerError(res,5);
454
      case ERROR_CENTER_6_MISSING : return centerError(res,6);
455
      case ERROR_CENTER_7_MISSING : return centerError(res,7);
456

  
457
      case ERROR_TWO_CORNERS      : return res.getString(R.string.solver_generic_two_corners);
458
      case ERROR_TWO_CENTERS      : return res.getString(R.string.solver_generic_two_centers);
459
      case ERROR_CORNER_TWIST     : return res.getString(R.string.solver_generic_corner_twist);
460
      case ERROR_CORNERS_CANNOT   : return res.getString(R.string.solver_generic_corners_cannot);
327 461
      }
328 462

  
329 463
    return null;
src/main/res/values-de/strings.xml
84 84
    <string name="solver_generic_edge_twist">Eine Kante muss verdreht werden!</string>
85 85
    <string name="solver_generic_two_centers">Zwei Zentren müssen ausgetauscht werden!</string>
86 86
    <string name="solver_generic_two_edges">Zwei Randstücke müssen ausgetauscht werden!</string>
87
    <string name="solver_generic_two_corners">Zwei Ecken müssen ausgetauscht werden!</string>
87 88
    <string name="solver_generic_missing_center">Die %1$s Mitte fehlt!</string>
88 89
    <string name="solver_generic_missing_corner">Die %1$s-%2$s-%3$s Ecke fehlt!</string>
89 90
    <string name="solver_generic_missing_vertex">Der %1$s-%2$s-%3$s Oktaeder fehlt!</string>
90 91
    <string name="solver_generic_missing_edge">Die %1$s-%2$s Kante fehlt!</string>
92
    <string name="solver_generic_missing_corner2">Die %1$s-%2$s Ecke fehlt!</string>
91 93
    <string name="solver_generic_corners_cannot">Ecken können nicht verdreht werden, sodass alle Seiten einfarbig sind!</string>
92 94
    <string name="solver_generic_vertices_cannot">Oktaederstücke können nicht so verdreht werden, sodass alle Seiten einfarbig sind!</string>
93 95
    <string name="solver_generic_c_v_dont_match">Oktaederstücke und Tetraederecken passen nicht zusammen!</string>
src/main/res/values-es/strings.xml
84 84
    <string name="solver_generic_edge_twist">¡Hay que torcer una borde!</string>
85 85
    <string name="solver_generic_two_centers">¡Hay que cambiar dos centros!</string>
86 86
    <string name="solver_generic_two_edges">¡Hay que cambiar dos piezas de borde!</string>
87
    <string name="solver_generic_two_corners">¡Hay que cambiar dos esquinas!</string>
87 88
    <string name="solver_generic_missing_center">¡Falta el centro %1$s!</string>
88 89
    <string name="solver_generic_missing_corner">¡Falta la esquina %1$s-%2$s-%3$s!</string>
89 90
    <string name="solver_generic_missing_vertex">¡Falta el octaedro %1$s-%2$s-%3$s!</string>
90 91
    <string name="solver_generic_missing_edge">¡Falta la pieza del borde %1$s-%2$s!</string>
92
    <string name="solver_generic_missing_corner2">¡Falta la esquina %1$s-%2$s!</string>
91 93
    <string name="solver_generic_corners_cannot">¡Las esquinas no se pueden torcer para que todos los lados sean monocromáticos!</string>
92 94
    <string name="solver_generic_vertices_cannot">¡Las piezas octaédricas no se pueden torcer para que todos los lados sean monocromáticos!</string>
93 95
    <string name="solver_generic_c_v_dont_match">¡Las piezas octaédricas y las esquinas tetraédricas no coinciden!</string>
src/main/res/values-fr/strings.xml
84 84
    <string name="solver_generic_edge_twist">Un bord doit être tourné !</string>
85 85
    <string name="solver_generic_two_centers">Deux centres doivent être échangés !</string>
86 86
    <string name="solver_generic_two_edges">Deux pièces de bord doivent être échangées !</string>
87
    <string name="solver_generic_two_corners">Deux coins doivent être échangés !</string>
87 88
    <string name="solver_generic_missing_center">Centre %1$s manquant !</string>
88 89
    <string name="solver_generic_missing_corner">Coin %1$s-%2$s-%3$s manquant !</string>
89 90
    <string name="solver_generic_missing_vertex">L\'octaèdre %1$s-%2$s-%3$s manque !</string>
90 91
    <string name="solver_generic_missing_edge">La pièce de bordure %1$s-%2$s manque!</string>
92
    <string name="solver_generic_missing_corner2">Coin %1$s-%2$s manquant !</string>
91 93
    <string name="solver_generic_corners_cannot">Les coins ne peuvent pas être tordus afin que tous les côtés soient monochromes !</string>
92 94
    <string name="solver_generic_vertices_cannot">Les pièces octaédriques ne peuvent pas être tordues afin que tous les côtés soient monochromes !</string>
93 95
    <string name="solver_generic_c_v_dont_match">Les pièces octaédriques et les coins tétraédriques ne correspondent pas !</string>
src/main/res/values-ja/strings.xml
85 85
    <string name="solver_generic_edge_twist">片方の端をひねる必要がある!</string>
86 86
    <string name="solver_generic_two_centers">2つのセンターを交換しなければならない!</string>
87 87
    <string name="solver_generic_two_edges">2 つのエッジ ピースを交換する必要があります。</string>
88
    <string name="solver_generic_two_corners">2 つのコーナーを交換する必要があります !</string>
88 89
    <string name="solver_generic_missing_center">%1$sのセンターが欠けてる!</string>
89 90
    <string name="solver_generic_missing_corner">%1$s%2$s%3$sのコーナーがない!</string>
90 91
    <string name="solver_generic_missing_vertex">%1$s-%2$s-%3$s八面体がありません!</string>
91 92
    <string name="solver_generic_missing_edge">%1$s%2$sボーダーピースはありません!</string>
93
    <string name="solver_generic_missing_corner2">%1$s%2$sのコーナーがない!</string>
92 94
    <string name="solver_generic_corners_cannot">すべての面がモノクロになるようにコーナーをねじることはできません。</string>
93 95
    <string name="solver_generic_vertices_cannot">すべての面が単色になるように、八面体のピースをねじることはできません。</string>
94 96
    <string name="solver_generic_c_v_dont_match">八面体のピースと四面体の角が一致しません!</string>
src/main/res/values-ko/strings.xml
84 84
    <string name="solver_generic_edge_twist">한쪽 가장자리를 비틀어야 합니다!</string>
85 85
    <string name="solver_generic_two_centers">두 개의 센터를 교환해야 합니다!</string>
86 86
    <string name="solver_generic_two_edges">두 모서리 조각을 교환해야 합니다!</string>
87
    <string name="solver_generic_two_corners">두 모서리를 교환해야 합니다!</string>
87 88
    <string name="solver_generic_missing_center">%1$s 중앙이 사라졌습니다!</string>
88 89
    <string name="solver_generic_missing_corner">%1$s-%2$s-%3$s 모서리 금지!</string>
89 90
    <string name="solver_generic_missing_vertex">%1$s-%2$s-%3$s 팔면체가 없습니다!</string>
90 91
    <string name="solver_generic_missing_edge">%1$s%2$s 테두리 조각이 없습니다!</string>
92
    <string name="solver_generic_missing_corner2">%1$s-%2$s 모서리 금지!</string>
91 93
    <string name="solver_generic_corners_cannot">모든면이 단색이되도록 모서리를 비틀 수 없습니다!</string>
92 94
    <string name="solver_generic_vertices_cannot">팔면체 조각은 뒤틀릴 수 없으므로 모든면이 단색입니다!</string>
93 95
    <string name="solver_generic_c_v_dont_match">팔면체 조각과 사면체 모서리가 일치하지 않습니다!</string>
src/main/res/values-pl/strings.xml
84 84
    <string name="solver_generic_edge_twist">Jedna z krawędzi musi byc obrócona!</string>
85 85
    <string name="solver_generic_two_centers">Dwa środki muszą być wymienione!</string>
86 86
    <string name="solver_generic_two_edges">Dwie krawędzie muszą być wymienione!</string>
87
    <string name="solver_generic_two_corners">Dwa centry muszą być wymienione!</string>
87 88
    <string name="solver_generic_missing_center">Brakuje %1$s środka!</string>
88 89
    <string name="solver_generic_missing_corner">Brakuje %1$s-%2$s-%3$s rogu!</string>
89 90
    <string name="solver_generic_missing_vertex">Brakuje %1$s-%2$s-%3$s ośmiokątu!</string>
90 91
    <string name="solver_generic_missing_edge">Brakuje %1$s-%2$s krawędzi!</string>
92
    <string name="solver_generic_missing_corner2">Brakuje %1$s-%2$s rogu!</string>
91 93
    <string name="solver_generic_corners_cannot">Narożników nie można skręcić tak, aby wszystkie boki były monochromatyczne!</string>
92 94
    <string name="solver_generic_vertices_cannot">Części ośmiościennych nie można skręcić tak, aby wszystkie boki były monochromatyczne!</string>
93 95
    <string name="solver_generic_c_v_dont_match">Części ośmiościenne i czworościenne rogi nie pasują do siebie!</string>
src/main/res/values-ru/strings.xml
84 84
    <string name="solver_generic_edge_twist">Одно ребро должно быть переставлен!</string>
85 85
    <string name="solver_generic_two_centers">Два центра должны быть обменены!</string>
86 86
    <string name="solver_generic_two_edges">Два ребра должны быть заменены!</string>
87
    <string name="solver_generic_two_corners">Два угла нужно поменять местами!</string>
87 88
    <string name="solver_generic_missing_center">Нет %1$s центра!</string>
88 89
    <string name="solver_generic_missing_corner">Нет %1$s-%2$s-%3$s угла!</string>
89 90
    <string name="solver_generic_missing_vertex">Нет %1$s-%2$s-%3$s октаэдра!</string>
90 91
    <string name="solver_generic_missing_edge">Нет %1$s-%2$s ребра!</string>
92
    <string name="solver_generic_missing_corner2">Нет %1$s-%2$s угла!</string>
91 93
    <string name="solver_generic_corners_cannot">Углы нельзя скручивать так, чтобы все стороны были однотонными!</string>
92 94
    <string name="solver_generic_vertices_cannot">Восьмигранные фигуры нельзя скрутить так, чтобы все стороны были однотонными!</string>
93 95
    <string name="solver_generic_c_v_dont_match">Восьмигранные фигуры и четырехгранные углы не совпадают!</string>
src/main/res/values-zh-rCN/strings.xml
90 90
    <string name="solver_generic_edge_twist">一条边需要扭动!</string>
91 91
    <string name="solver_generic_two_centers">必须要交换两个中心!</string>
92 92
    <string name="solver_generic_two_edges">必须交换两个边缘!</string>
93
    <string name="solver_generic_two_corners">两个角必须交换!</string>
93 94
    <string name="solver_generic_missing_center">%1$s中心不見了!</string>
94 95
    <string name="solver_generic_missing_corner">没有%1$s-%2$s-%3$s的角落!</string>
95 96
    <string name="solver_generic_missing_vertex">没有%1$s-%2$s-%3$s八面体!</string>
96 97
    <string name="solver_generic_missing_edge">没有1$s-%2$s边!</string>
98
    <string name="solver_generic_missing_corner2">没有%1$s-%2$s的角落!</string>
97 99
    <string name="solver_generic_corners_cannot">角不能扭曲,这样所有的面都是单色的!</string>
98 100
    <string name="solver_generic_vertices_cannot">八面体块不能扭曲,所以所有面都是单色的!</string>
99 101
    <string name="solver_generic_c_v_dont_match">八面体块和四面体角不匹配!</string>
src/main/res/values-zh-rTW/strings.xml
84 84
    <string name="solver_generic_edge_twist">一個邊緣要扭動!</string>
85 85
    <string name="solver_generic_two_centers">兩個中鋒要互換!</string>
86 86
    <string name="solver_generic_two_edges">必須交換兩個邊緣!</string>
87
    <string name="solver_generic_two_corners">兩個角必須交換!</string>
87 88
    <string name="solver_generic_missing_center">%1$s的中心不见了!</string>
88 89
    <string name="solver_generic_missing_corner">沒有%1$s-%2$s-%3$s的角落!</string>
89 90
    <string name="solver_generic_missing_vertex">沒有%1$s-%2$s-%3$s八面體!</string>
90 91
    <string name="solver_generic_missing_edge">沒有1$s-%2$s邊!</string>
92
    <string name="solver_generic_missing_corner2">沒有%1$s-%2$s的角落!</string>
91 93
    <string name="solver_generic_corners_cannot">角不能扭曲,這樣所有的面都是單色的!</string>
92 94
    <string name="solver_generic_vertices_cannot">八面體塊不能扭曲,所以所有面都是單色的!</string>
93 95
    <string name="solver_generic_c_v_dont_match">八面體塊和四面體角不匹配!</string>
src/main/res/values/strings.xml
104 104
    <string name="solver_generic_edge_twist">One edge has to be twisted!</string>
105 105
    <string name="solver_generic_two_centers">Two centers have to be exchanged!</string>
106 106
    <string name="solver_generic_two_edges">Two edges have to be exchanged!</string>
107
    <string name="solver_generic_two_corners">Two corners have to be exchanged!</string>
107 108
    <string name="solver_generic_missing_center">The %1$s center is missing!</string>
108 109
    <string name="solver_generic_missing_corner">The %1$s-%2$s-%3$s corner is missing!</string>
109 110
    <string name="solver_generic_missing_vertex">The %1$s-%2$s-%3$s octahedron piece is missing!</string>
110 111
    <string name="solver_generic_missing_edge">The %1$s-%2$s edge is missing!</string>
112
    <string name="solver_generic_missing_corner2">The %1$s-%2$s corner is missing!</string>
111 113
    <string name="solver_generic_corners_cannot">Corners cannot be twisted so that all faces are monochromatic!</string>
112 114
    <string name="solver_generic_vertices_cannot">Octahedral pieces cannot be twisted so that all faces are monochromatic!</string>
113 115
    <string name="solver_generic_c_v_dont_match">Octahedral pieces and tetrahedral corners do not match!</string>

Also available in: Unified diff