Advertisement
Guest User

MiniCubeSolverOrtegaJava

a guest
Jun 20th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.18 KB | None | 0 0
  1. public class Solver {
  2. // rotira u smjeru suprotnom od kazaljke
  3. static char[] rxi(char[] t) {
  4. char[] novi = new char[24];
  5. novi[0] = t[1];
  6. novi[1] = t[3];
  7. novi[2] = t[0];
  8. novi[3] = t[2];
  9. novi[4] = t[10];
  10. novi[5] = t[11];
  11. novi[6] = t[4];
  12. novi[7] = t[5];
  13. novi[8] = t[6];
  14. novi[9] = t[7];
  15. novi[10] = t[8];
  16. novi[11] = t[9];
  17. novi[12] = t[18];
  18. novi[13] = t[19];
  19. novi[14] = t[12];
  20. novi[15] = t[13];
  21. novi[16] = t[14];
  22. novi[17] = t[15];
  23. novi[18] = t[16];
  24. novi[19] = t[17];
  25. novi[20] = t[22];
  26. novi[21] = t[20];
  27. novi[22] = t[23];
  28. novi[23] = t[21];
  29. return novi;
  30. }
  31.  
  32. // obrne jednom u smjeru kazaljke na satu po x osi
  33. public static char[] rx(char[] t) {
  34. t = rxi(rxi(rxi(t)));
  35. return t;
  36. }
  37.  
  38. // obrne jednom put gore
  39. static char[] ry(char[] t) {
  40. char[] novi = new char[24];
  41. novi = R(Li(t));
  42. return novi;
  43. }
  44.  
  45. static char[] R(char[] trenutna) {
  46. char[] novi = new char[24];
  47. novi[1] = trenutna[7];
  48. novi[3] = trenutna[15];
  49. novi[7] = trenutna[21];
  50. novi[8] = trenutna[16];
  51. novi[9] = trenutna[8];
  52. novi[10] = trenutna[3];
  53. novi[15] = trenutna[23];
  54. novi[16] = trenutna[17];
  55. novi[17] = trenutna[9];
  56. novi[18] = trenutna[1];
  57. novi[21] = trenutna[18];
  58. novi[23] = trenutna[10];
  59. novi[0] = trenutna[0];
  60. novi[2] = trenutna[2];
  61. novi[4] = trenutna[4];
  62. novi[5] = trenutna[5];
  63. novi[6] = trenutna[6];
  64. novi[11] = trenutna[11];
  65. novi[12] = trenutna[12];
  66. novi[13] = trenutna[13];
  67. novi[14] = trenutna[14];
  68. novi[19] = trenutna[19];
  69. novi[20] = trenutna[20];
  70. novi[22] = trenutna[22];
  71. return novi;
  72. }
  73.  
  74. static char[] L(char[] trenutna) {
  75. char[] novi = new char[24];
  76. novi = rx(rx(trenutna));
  77. novi = R(novi);
  78. novi = rx(rx(novi));
  79. return novi;
  80. }
  81.  
  82. static char[] F(char[] trenutna) {
  83. char[] novi = new char[24];
  84. novi = rxi(trenutna);
  85. novi = R(novi);
  86. novi = rxi(rxi(rxi(novi)));
  87. return novi;
  88. }
  89.  
  90. static char[] B(char[] trenutna) {
  91. char[] novi = new char[24];
  92. novi = rx(trenutna);
  93. novi = R(novi);
  94. novi = rxi(novi);
  95. return novi;
  96. }
  97.  
  98. static char[] D(char[] trenutna) {
  99. char[] novi = new char[24];
  100. novi = ry(trenutna);
  101. novi = F(novi);
  102. novi = ry(ry(ry(novi)));
  103. return novi;
  104. }
  105.  
  106. static char[] U(char[] trenutna) {
  107. char[] novi = new char[24];
  108. novi = ry(trenutna);
  109. novi = B(novi);
  110. novi = ry(ry(ry(novi)));
  111. return novi;
  112. }
  113.  
  114. static char[] Ui(char[] trenutna) {
  115. char[] novi = new char[24];
  116. novi = U(U(U(trenutna)));
  117. return novi;
  118. }
  119.  
  120. static char[] Bi(char[] trenutna) {
  121. char[] novi = new char[24];
  122. novi = B(B(B(trenutna)));
  123. return novi;
  124. }
  125.  
  126. static char[] Li(char[] trenutna) {
  127. char[] novi = trenutna;
  128. novi = L(L(L(trenutna)));
  129. return novi;
  130. }
  131.  
  132. static char[] Di(char[] trenutna) {
  133. char[] novi = new char[24];
  134. novi = D(D(D(trenutna)));
  135. return novi;
  136. }
  137.  
  138. static char[] Fi(char[] trenutna) {
  139. char[] novi = new char[24];
  140. novi = F(F(F(trenutna)));
  141. return novi;
  142. }
  143.  
  144. static char[] Ri(char[] trenutna) {
  145. char[] novi = new char[24];
  146. novi = R(R(R(trenutna)));
  147. return novi;
  148. }
  149.  
  150. ///////////////// da cosak WRB bude na 3,7,8 poziciju u nizu - wrb rbw ili
  151. ///////////////// bwr
  152. static char[] orijentisi(char[] t) {
  153. int b = 0;
  154. char[] novi = t;
  155. ///// dovodi pravi cosak na pravo mjesto
  156. while (((novi[3] == 'w' && novi[7] == 'r' && novi[8] == 'b')
  157. || (novi[3] == 'r' && novi[7] == 'b' && novi[8] == 'w')
  158. || (novi[3] == 'b' && novi[7] == 'w' && novi[8] == 'r')) == false) {
  159. while (((novi[3] == 'w' && novi[7] == 'r' && novi[8] == 'b')
  160. || (novi[3] == 'r' && novi[7] == 'b' && novi[8] == 'w')
  161. || (novi[3] == 'b' && novi[7] == 'w' && novi[8] == 'r')) == false && b < 4) {
  162. novi = rx(novi);
  163. System.out.println("rx");
  164. b++;
  165. if ((novi[3] == 'w' && novi[7] == 'r' && novi[8] == 'b')
  166. || (novi[3] == 'r' && novi[7] == 'b' && novi[8] == 'w')
  167. || (novi[3] == 'b' && novi[7] == 'w' && novi[8] == 'r')) {
  168.  
  169. return novi;
  170. }
  171. }
  172. novi = ry(novi);
  173. System.out.println("ry");
  174. b = 0;
  175. }
  176. return novi;
  177. }
  178.  
  179. // orijentise kocku tako da vec postavljeni pravi cosak bude sa bijelom
  180. // bojom gore
  181. public static char[] obrni(char[] t) {
  182. char[] novi = orijentisi(t);
  183.  
  184. if ((novi[3] == 'w' && novi[7] == 'r' && novi[8] == 'b')) {
  185. return novi; // ako je vec orijentisan odma vraca
  186. } else if ((novi[3] == 'r' && novi[7] == 'b' && novi[8] == 'w')) {
  187. novi = ry(ry(ry(rxi(novi))));
  188. System.out.println("rxi ry ry ry");
  189. return novi;
  190. } else {
  191. novi = ry(rxi(novi));
  192. System.out.println("rxi ry");
  193. return novi;
  194. }
  195. }
  196.  
  197. public static char[] prepoznajOLL(char[] t) {
  198. if (t[20] == 'y' && t[12] == 'y' && t[18] == 'y' && t[16] == 'y') {
  199. System.out.println("ry ry rxi (R U R’ U) (R U2 R’)");
  200. return Ri(U(U(R(U(Ri(U(R(rxi(ry(ry(t)))))))))));
  201.  
  202. } else if (t[22] == 'y' && t[18] == 'y' && t[16] == 'y' && t[14] == 'y') {
  203. System.out.println("ry ry (R U R’ U) (R U2 R’)");
  204. return Ri(U(U(R(U(Ri(U(R(ry(ry(t))))))))));
  205. } else if (t[23] == 'y' && t[12] == 'y' && t[14] == 'y' && t[16] == 'y') {
  206. System.out.println("ry ry rx (R U R’ U) (R U2 R’)");
  207. return Ri(U(U(R(U(Ri(U(R(rx(ry(ry(t)))))))))));
  208. } else if (t[21] == 'y' && t[14] == 'y' && t[12] == 'y' && t[18] == 'y') {
  209. System.out.println("ry ry rxi rxi (R U R’ U) (R U2 R’)");
  210. return Ri(U(U(R(U(Ri(U(R(rxi(rxi(ry(ry(t))))))))))));
  211. }
  212.  
  213. else if (t[20] == 'y' && t[19] == 'y' && t[17] == 'y' && t[15] == 'y') {
  214. System.out.println("ry ry (R’ U’ R) U’ (R’ U2’ R)");
  215. return R(Ui(Ui(Ri(Ui(R(Ui(Ri(ry(ry(t))))))))));
  216. } else if (t[22] == 'y' && t[17] == 'y' && t[15] == 'y' && t[13] == 'y') {
  217. System.out.println("ry ry rx (R’ U’ R) U’ (R’ U2’ R)");
  218. return R(Ui(Ui(Ri(Ui(R(Ui(Ri(rx(ry(ry(t)))))))))));
  219. } else if (t[23] == 'y' && t[15] == 'y' && t[13] == 'y' && t[19] == 'y') {
  220. System.out.println("ry ry rxi rxi (R’ U’ R) U’ (R’ U2’ R)");
  221. return R(Ui(Ui(Ri(Ui(R(Ui(Ri(rxi(rxi(ry(ry(t))))))))))));
  222. } else if (t[21] == 'y' && t[13] == 'y' && t[19] == 'y' && t[17] == 'y') {
  223. System.out.println("ry ry rxi (R’ U’ R) U’ (R’ U2’ R)");
  224. return R(Ui(Ui(Ri(Ui(R(Ui(Ri(rxi(ry(ry(t)))))))))));
  225. }
  226.  
  227. else if (t[20] == 'y' && t[21] == 'y' && t[18] == 'y' && t[19] == 'y') {
  228. System.out.println("ry ry rxi F U R U’ R’ F’");
  229. return Fi(Ri(Ui(R(U(F(rxi(ry(ry(t)))))))));
  230. } else if (t[20] == 'y' && t[22] == 'y' && t[16] == 'y' && t[17] == 'y') {
  231. System.out.println("ry ry F U R U’ R’ F’");
  232. return Fi(Ri(Ui(R(U(F(ry(ry(t))))))));
  233.  
  234. } else if (t[22] == 'y' && t[23] == 'y' && t[15] == 'y' && t[14] == 'y') {
  235. System.out.println("ry ry rx F U R U’ R’ F’");
  236. return Fi(Ri(Ui(R(U(F(rx(ry(ry(t)))))))));
  237.  
  238. } else if (t[21] == 'y' && t[23] == 'y' && t[13] == 'y' && t[12] == 'y') {
  239. System.out.println("ry ry rxi rxi F U R U’ R’ F’");
  240. return Fi(Ri(Ui(R(U(F(rxi(rxi(ry(ry(t))))))))));
  241. }
  242.  
  243. else if (t[20] == 'y' && t[21] == 'y' && t[12] == 'y' && t[17] == 'y') {
  244. System.out.println("ry ry rx (R U R’ U’) (R’ F R F’)");
  245. return Fi(R(F(Ri(Ui(Ri(U(R(rx(ry(ry(t)))))))))));
  246. } else if (t[22] == 'y' && t[23] == 'y' && t[16] == 'y' && t[13] == 'y') {
  247. System.out.println("ry ry rxi (R U R’ U’) (R’ F R F’)");
  248. return Fi(R(F(Ri(Ui(Ri(U(R(rxi(ry(ry(t)))))))))));
  249. } else if (t[20] == 'y' && t[22] == 'y' && t[18] == 'y' && t[15] == 'y') {
  250. System.out.println("ry ry rxi rxi (R U R’ U’) (R’ F R F’)");
  251. return Fi(R(F(Ri(Ui(Ri(U(R(rxi(rxi(ry(ry(t))))))))))));
  252. } else if (t[21] == 'y' && t[23] == 'y' && t[14] == 'y' && t[19] == 'y') {
  253. System.out.println("ry ry (R U R’ U’) (R’ F R F’)");
  254. return Fi(R(F(Ri(Ui(Ri(U(R(ry(ry(t))))))))));
  255. }
  256.  
  257. else if (t[20] == 'y' && t[23] == 'y' && t[19] == 'y' && t[16] == 'y') {
  258. System.out.println("ry ry rx F’ (R U R’ U’) R’ F R");
  259. return R(F(Ri(Ui(Ri(U(R(Fi(rx(ry(ry(t)))))))))));
  260. } else if (t[22] == 'y' && t[21] == 'y' && t[17] == 'y' && t[14] == 'y') {
  261. System.out.println("ry ry rxi rxi F’ (R U R’ U’) R’ F R");
  262. return R(F(Ri(Ui(Ri(U(R(Fi(rxi(rxi(ry(ry(t))))))))))));
  263. } else if (t[23] == 'y' && t[20] == 'y' && t[15] == 'y' && t[12] == 'y') {
  264. System.out.println("ry ry rxi F’ (R U R’ U’) R’ F R");
  265. return R(F(Ri(Ui(Ri(U(R(Fi(rxi(ry(ry(t)))))))))));
  266. } else if (t[21] == 'y' && t[22] == 'y' && t[13] == 'y' && t[18] == 'y') {
  267. System.out.println("ry ry F’ (R U R’ U’) R’ F R");
  268. return R(F(Ri(Ui(Ri(U(R(Fi(ry(ry(t))))))))));
  269. }
  270.  
  271. else if (t[14] == 'y' && t[15] == 'y' && t[18] == 'y' && t[19] == 'y') {
  272. System.out.println("ry ry R2 U2 R U2 R2");
  273. return R(R(U(U(R(U(U(R(R(ry(ry(t)))))))))));
  274. } else if (t[12] == 'y' && t[13] == 'y' && t[16] == 'y' && t[17] == 'y') {
  275. System.out.println("ry ry rxi R2 U2 R U2 R2");
  276. return R(R(U(U(R(U(U(R(R(rxi(ry(ry(t))))))))))));
  277. }
  278.  
  279. else if (t[18] == 'y' && t[19] == 'y' && t[16] == 'y' && t[13] == 'y') {
  280. System.out.println("ry ry rx F (R U R’ U’) (R U R’ U’) F’");
  281. return Fi(Ui(Ri(U(R(Ui(Ri(U(R(F(rx(ry(ry(t)))))))))))));
  282. } else if (t[17] == 'y' && t[16] == 'y' && t[14] == 'y' && t[19] == 'y') {
  283. System.out.println("ry ry rxi rxi F (R U R’ U’) (R U R’ U’) F’");
  284. return Fi(Ui(Ri(U(R(Ui(Ri(U(R(F(rxi(rxi(ry(ry(t))))))))))))));
  285. } else if (t[15] == 'y' && t[14] == 'y' && t[12] == 'y' && t[17] == 'y') {
  286. System.out.println("ry ry rxi F (R U R’ U’) (R U R’ U’) F’");
  287. return Fi(Ui(Ri(U(R(Ui(Ri(U(R(F(rxi(ry(ry(t)))))))))))));
  288. } else if (t[13] == 'y' && t[12] == 'y' && t[15] == 'y' && t[18] == 'y') {
  289. System.out.println("ry ry F (R U R’ U’) (R U R’ U’) F’");
  290. return Fi(Ui(Ri(U(R(Ui(Ri(U(R(F(ry(ry(t))))))))))));
  291. } else
  292. return "unknown oll".toCharArray();
  293. }
  294.  
  295. public static char[] prepoznajPLL(char[] t) {
  296. if (t[4] == t[5] && t[6] == t[7] && t[8] == t[9] && t[10] == t[11]) {
  297. return t;
  298. }
  299.  
  300. if (t[4] == t[5]) {
  301. System.out.println("(R U2 R’ U’) (R U2) L’ U R’ U’ L");
  302. return L(Ui(Ri(U(Li(U(U(R(Ui(Ri(U(U(R(t)))))))))))));
  303. } else if (t[6] == t[7]) {
  304. System.out.println("rx (R U2 R’ U’) (R U2) L’ U R’ U’ L");
  305. return L(Ui(Ri(U(Li(U(U(R(Ui(Ri(U(U(R(rx(t))))))))))))));
  306. } else if (t[8] == t[9]) {
  307. System.out.println("rx rx (R U2 R’ U’) (R U2) L’ U R’ U’ L");
  308. return L(Ui(Ri(U(Li(U(U(R(Ui(Ri(U(U(R(rx(rx(t)))))))))))))));
  309. } else if (t[10] == t[11]) {
  310. System.out.println("rx (R U2 R’ U’) (R U2) L’ U R’ U’ L");
  311. return L(Ui(Ri(U(Li(U(U(R(Ui(Ri(U(U(R(rx(t))))))))))))));
  312. }
  313.  
  314. else if (t[4] != t[7] && t[4] != t[8] && t[11] != t[7] && t[19] != t[8]) {
  315. System.out.println("rx (F R U’) (R’ U’ R U) (R’ F’) (R U R’ U’) (R’ F R F’)");
  316. return Fi(R(F(Ri(Ui(Ri(U(R(Fi(Ri(U(R(Ui(Ri(Ui(R(F(rx(t))))))))))))))))));
  317. } else {
  318. System.out.println("(F R U’) (R’ U’ R U) (R’ F’) (R U R’ U’) (R’ F R F’)");
  319. return L(Ui(Ri(U(Li(U(U(R(Ui(Ri(U(U(R(t)))))))))))));
  320. }
  321. }
  322.  
  323. public static char[] finishit(char[] t) {
  324. while (t[4] != t[12]) {
  325. t = U(t);
  326. System.out.println("U");
  327. }
  328. return t;
  329. }
  330.  
  331. public static void main(String[] args) {
  332. System.out.println("Uneseni raspored na kocki");
  333. char[] r = "yooorbygwwbboyggwwbyrrgr".toCharArray();
  334. System.out.println(r);
  335. System.out.println();
  336. System.out.println("Pokreti za pravilnu orijentaciju kocke:");
  337. r = obrni(r); // orijentisi kocku sa wrb coskom jer po njima radi
  338. // prepoznavanje OLL
  339. System.out.println();
  340. System.out.println("Orijentisana kocka:");
  341. System.out.println(r); // odstampa okrenutu kocku
  342. System.out.println();
  343. System.out.println("Pokreti za orijentaciju posljednjeg layera");
  344. char[] oriented = prepoznajOLL(r);
  345. System.out.println();
  346. // System.out.println(prepoznajOLL(r)); // ako je slozena reci, inace
  347. // prepoznaj
  348. // odgovarajuci OLL algoritam
  349.  
  350. System.out.println("Pokreti za permutaciju posljednjeg layera");
  351. char[] permuted = prepoznajPLL(oriented); // prepoznaj
  352. //odgovarajuci PLL
  353. // algoritam
  354. // kocka ce
  355. //biti obrnuta
  356. // naopako
  357.  
  358. char[] finished = finishit(permuted);
  359. }
  360. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement