Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class Solver {
- // rotira u smjeru suprotnom od kazaljke
- static char[] rxi(char[] t) {
- char[] novi = new char[24];
- novi[0] = t[1];
- novi[1] = t[3];
- novi[2] = t[0];
- novi[3] = t[2];
- novi[4] = t[10];
- novi[5] = t[11];
- novi[6] = t[4];
- novi[7] = t[5];
- novi[8] = t[6];
- novi[9] = t[7];
- novi[10] = t[8];
- novi[11] = t[9];
- novi[12] = t[18];
- novi[13] = t[19];
- novi[14] = t[12];
- novi[15] = t[13];
- novi[16] = t[14];
- novi[17] = t[15];
- novi[18] = t[16];
- novi[19] = t[17];
- novi[20] = t[22];
- novi[21] = t[20];
- novi[22] = t[23];
- novi[23] = t[21];
- return novi;
- }
- // obrne jednom u smjeru kazaljke na satu po x osi
- public static char[] rx(char[] t) {
- t = rxi(rxi(rxi(t)));
- return t;
- }
- // obrne jednom put gore
- static char[] ry(char[] t) {
- char[] novi = new char[24];
- novi = R(Li(t));
- return novi;
- }
- static char[] R(char[] trenutna) {
- char[] novi = new char[24];
- novi[1] = trenutna[7];
- novi[3] = trenutna[15];
- novi[7] = trenutna[21];
- novi[8] = trenutna[16];
- novi[9] = trenutna[8];
- novi[10] = trenutna[3];
- novi[15] = trenutna[23];
- novi[16] = trenutna[17];
- novi[17] = trenutna[9];
- novi[18] = trenutna[1];
- novi[21] = trenutna[18];
- novi[23] = trenutna[10];
- novi[0] = trenutna[0];
- novi[2] = trenutna[2];
- novi[4] = trenutna[4];
- novi[5] = trenutna[5];
- novi[6] = trenutna[6];
- novi[11] = trenutna[11];
- novi[12] = trenutna[12];
- novi[13] = trenutna[13];
- novi[14] = trenutna[14];
- novi[19] = trenutna[19];
- novi[20] = trenutna[20];
- novi[22] = trenutna[22];
- return novi;
- }
- static char[] L(char[] trenutna) {
- char[] novi = new char[24];
- novi = rx(rx(trenutna));
- novi = R(novi);
- novi = rx(rx(novi));
- return novi;
- }
- static char[] F(char[] trenutna) {
- char[] novi = new char[24];
- novi = rxi(trenutna);
- novi = R(novi);
- novi = rxi(rxi(rxi(novi)));
- return novi;
- }
- static char[] B(char[] trenutna) {
- char[] novi = new char[24];
- novi = rx(trenutna);
- novi = R(novi);
- novi = rxi(novi);
- return novi;
- }
- static char[] D(char[] trenutna) {
- char[] novi = new char[24];
- novi = ry(trenutna);
- novi = F(novi);
- novi = ry(ry(ry(novi)));
- return novi;
- }
- static char[] U(char[] trenutna) {
- char[] novi = new char[24];
- novi = ry(trenutna);
- novi = B(novi);
- novi = ry(ry(ry(novi)));
- return novi;
- }
- static char[] Ui(char[] trenutna) {
- char[] novi = new char[24];
- novi = U(U(U(trenutna)));
- return novi;
- }
- static char[] Bi(char[] trenutna) {
- char[] novi = new char[24];
- novi = B(B(B(trenutna)));
- return novi;
- }
- static char[] Li(char[] trenutna) {
- char[] novi = trenutna;
- novi = L(L(L(trenutna)));
- return novi;
- }
- static char[] Di(char[] trenutna) {
- char[] novi = new char[24];
- novi = D(D(D(trenutna)));
- return novi;
- }
- static char[] Fi(char[] trenutna) {
- char[] novi = new char[24];
- novi = F(F(F(trenutna)));
- return novi;
- }
- static char[] Ri(char[] trenutna) {
- char[] novi = new char[24];
- novi = R(R(R(trenutna)));
- return novi;
- }
- ///////////////// da cosak WRB bude na 3,7,8 poziciju u nizu - wrb rbw ili
- ///////////////// bwr
- static char[] orijentisi(char[] t) {
- int b = 0;
- char[] novi = t;
- ///// dovodi pravi cosak na pravo mjesto
- while (((novi[3] == 'w' && novi[7] == 'r' && novi[8] == 'b')
- || (novi[3] == 'r' && novi[7] == 'b' && novi[8] == 'w')
- || (novi[3] == 'b' && novi[7] == 'w' && novi[8] == 'r')) == false) {
- while (((novi[3] == 'w' && novi[7] == 'r' && novi[8] == 'b')
- || (novi[3] == 'r' && novi[7] == 'b' && novi[8] == 'w')
- || (novi[3] == 'b' && novi[7] == 'w' && novi[8] == 'r')) == false && b < 4) {
- novi = rx(novi);
- System.out.println("rx");
- b++;
- if ((novi[3] == 'w' && novi[7] == 'r' && novi[8] == 'b')
- || (novi[3] == 'r' && novi[7] == 'b' && novi[8] == 'w')
- || (novi[3] == 'b' && novi[7] == 'w' && novi[8] == 'r')) {
- return novi;
- }
- }
- novi = ry(novi);
- System.out.println("ry");
- b = 0;
- }
- return novi;
- }
- // orijentise kocku tako da vec postavljeni pravi cosak bude sa bijelom
- // bojom gore
- public static char[] obrni(char[] t) {
- char[] novi = orijentisi(t);
- if ((novi[3] == 'w' && novi[7] == 'r' && novi[8] == 'b')) {
- return novi; // ako je vec orijentisan odma vraca
- } else if ((novi[3] == 'r' && novi[7] == 'b' && novi[8] == 'w')) {
- novi = ry(ry(ry(rxi(novi))));
- System.out.println("rxi ry ry ry");
- return novi;
- } else {
- novi = ry(rxi(novi));
- System.out.println("rxi ry");
- return novi;
- }
- }
- public static char[] prepoznajOLL(char[] t) {
- if (t[20] == 'y' && t[12] == 'y' && t[18] == 'y' && t[16] == 'y') {
- System.out.println("ry ry rxi (R U R’ U) (R U2 R’)");
- return Ri(U(U(R(U(Ri(U(R(rxi(ry(ry(t)))))))))));
- } else if (t[22] == 'y' && t[18] == 'y' && t[16] == 'y' && t[14] == 'y') {
- System.out.println("ry ry (R U R’ U) (R U2 R’)");
- return Ri(U(U(R(U(Ri(U(R(ry(ry(t))))))))));
- } else if (t[23] == 'y' && t[12] == 'y' && t[14] == 'y' && t[16] == 'y') {
- System.out.println("ry ry rx (R U R’ U) (R U2 R’)");
- return Ri(U(U(R(U(Ri(U(R(rx(ry(ry(t)))))))))));
- } else if (t[21] == 'y' && t[14] == 'y' && t[12] == 'y' && t[18] == 'y') {
- System.out.println("ry ry rxi rxi (R U R’ U) (R U2 R’)");
- return Ri(U(U(R(U(Ri(U(R(rxi(rxi(ry(ry(t))))))))))));
- }
- else if (t[20] == 'y' && t[19] == 'y' && t[17] == 'y' && t[15] == 'y') {
- System.out.println("ry ry (R’ U’ R) U’ (R’ U2’ R)");
- return R(Ui(Ui(Ri(Ui(R(Ui(Ri(ry(ry(t))))))))));
- } else if (t[22] == 'y' && t[17] == 'y' && t[15] == 'y' && t[13] == 'y') {
- System.out.println("ry ry rx (R’ U’ R) U’ (R’ U2’ R)");
- return R(Ui(Ui(Ri(Ui(R(Ui(Ri(rx(ry(ry(t)))))))))));
- } else if (t[23] == 'y' && t[15] == 'y' && t[13] == 'y' && t[19] == 'y') {
- System.out.println("ry ry rxi rxi (R’ U’ R) U’ (R’ U2’ R)");
- return R(Ui(Ui(Ri(Ui(R(Ui(Ri(rxi(rxi(ry(ry(t))))))))))));
- } else if (t[21] == 'y' && t[13] == 'y' && t[19] == 'y' && t[17] == 'y') {
- System.out.println("ry ry rxi (R’ U’ R) U’ (R’ U2’ R)");
- return R(Ui(Ui(Ri(Ui(R(Ui(Ri(rxi(ry(ry(t)))))))))));
- }
- else if (t[20] == 'y' && t[21] == 'y' && t[18] == 'y' && t[19] == 'y') {
- System.out.println("ry ry rxi F U R U’ R’ F’");
- return Fi(Ri(Ui(R(U(F(rxi(ry(ry(t)))))))));
- } else if (t[20] == 'y' && t[22] == 'y' && t[16] == 'y' && t[17] == 'y') {
- System.out.println("ry ry F U R U’ R’ F’");
- return Fi(Ri(Ui(R(U(F(ry(ry(t))))))));
- } else if (t[22] == 'y' && t[23] == 'y' && t[15] == 'y' && t[14] == 'y') {
- System.out.println("ry ry rx F U R U’ R’ F’");
- return Fi(Ri(Ui(R(U(F(rx(ry(ry(t)))))))));
- } else if (t[21] == 'y' && t[23] == 'y' && t[13] == 'y' && t[12] == 'y') {
- System.out.println("ry ry rxi rxi F U R U’ R’ F’");
- return Fi(Ri(Ui(R(U(F(rxi(rxi(ry(ry(t))))))))));
- }
- else if (t[20] == 'y' && t[21] == 'y' && t[12] == 'y' && t[17] == 'y') {
- System.out.println("ry ry rx (R U R’ U’) (R’ F R F’)");
- return Fi(R(F(Ri(Ui(Ri(U(R(rx(ry(ry(t)))))))))));
- } else if (t[22] == 'y' && t[23] == 'y' && t[16] == 'y' && t[13] == 'y') {
- System.out.println("ry ry rxi (R U R’ U’) (R’ F R F’)");
- return Fi(R(F(Ri(Ui(Ri(U(R(rxi(ry(ry(t)))))))))));
- } else if (t[20] == 'y' && t[22] == 'y' && t[18] == 'y' && t[15] == 'y') {
- System.out.println("ry ry rxi rxi (R U R’ U’) (R’ F R F’)");
- return Fi(R(F(Ri(Ui(Ri(U(R(rxi(rxi(ry(ry(t))))))))))));
- } else if (t[21] == 'y' && t[23] == 'y' && t[14] == 'y' && t[19] == 'y') {
- System.out.println("ry ry (R U R’ U’) (R’ F R F’)");
- return Fi(R(F(Ri(Ui(Ri(U(R(ry(ry(t))))))))));
- }
- else if (t[20] == 'y' && t[23] == 'y' && t[19] == 'y' && t[16] == 'y') {
- System.out.println("ry ry rx F’ (R U R’ U’) R’ F R");
- return R(F(Ri(Ui(Ri(U(R(Fi(rx(ry(ry(t)))))))))));
- } else if (t[22] == 'y' && t[21] == 'y' && t[17] == 'y' && t[14] == 'y') {
- System.out.println("ry ry rxi rxi F’ (R U R’ U’) R’ F R");
- return R(F(Ri(Ui(Ri(U(R(Fi(rxi(rxi(ry(ry(t))))))))))));
- } else if (t[23] == 'y' && t[20] == 'y' && t[15] == 'y' && t[12] == 'y') {
- System.out.println("ry ry rxi F’ (R U R’ U’) R’ F R");
- return R(F(Ri(Ui(Ri(U(R(Fi(rxi(ry(ry(t)))))))))));
- } else if (t[21] == 'y' && t[22] == 'y' && t[13] == 'y' && t[18] == 'y') {
- System.out.println("ry ry F’ (R U R’ U’) R’ F R");
- return R(F(Ri(Ui(Ri(U(R(Fi(ry(ry(t))))))))));
- }
- else if (t[14] == 'y' && t[15] == 'y' && t[18] == 'y' && t[19] == 'y') {
- System.out.println("ry ry R2 U2 R U2 R2");
- return R(R(U(U(R(U(U(R(R(ry(ry(t)))))))))));
- } else if (t[12] == 'y' && t[13] == 'y' && t[16] == 'y' && t[17] == 'y') {
- System.out.println("ry ry rxi R2 U2 R U2 R2");
- return R(R(U(U(R(U(U(R(R(rxi(ry(ry(t))))))))))));
- }
- else if (t[18] == 'y' && t[19] == 'y' && t[16] == 'y' && t[13] == 'y') {
- System.out.println("ry ry rx F (R U R’ U’) (R U R’ U’) F’");
- return Fi(Ui(Ri(U(R(Ui(Ri(U(R(F(rx(ry(ry(t)))))))))))));
- } else if (t[17] == 'y' && t[16] == 'y' && t[14] == 'y' && t[19] == 'y') {
- System.out.println("ry ry rxi rxi F (R U R’ U’) (R U R’ U’) F’");
- return Fi(Ui(Ri(U(R(Ui(Ri(U(R(F(rxi(rxi(ry(ry(t))))))))))))));
- } else if (t[15] == 'y' && t[14] == 'y' && t[12] == 'y' && t[17] == 'y') {
- System.out.println("ry ry rxi F (R U R’ U’) (R U R’ U’) F’");
- return Fi(Ui(Ri(U(R(Ui(Ri(U(R(F(rxi(ry(ry(t)))))))))))));
- } else if (t[13] == 'y' && t[12] == 'y' && t[15] == 'y' && t[18] == 'y') {
- System.out.println("ry ry F (R U R’ U’) (R U R’ U’) F’");
- return Fi(Ui(Ri(U(R(Ui(Ri(U(R(F(ry(ry(t))))))))))));
- } else
- return "unknown oll".toCharArray();
- }
- public static char[] prepoznajPLL(char[] t) {
- if (t[4] == t[5] && t[6] == t[7] && t[8] == t[9] && t[10] == t[11]) {
- return t;
- }
- if (t[4] == t[5]) {
- System.out.println("(R U2 R’ U’) (R U2) L’ U R’ U’ L");
- return L(Ui(Ri(U(Li(U(U(R(Ui(Ri(U(U(R(t)))))))))))));
- } else if (t[6] == t[7]) {
- System.out.println("rx (R U2 R’ U’) (R U2) L’ U R’ U’ L");
- return L(Ui(Ri(U(Li(U(U(R(Ui(Ri(U(U(R(rx(t))))))))))))));
- } else if (t[8] == t[9]) {
- System.out.println("rx rx (R U2 R’ U’) (R U2) L’ U R’ U’ L");
- return L(Ui(Ri(U(Li(U(U(R(Ui(Ri(U(U(R(rx(rx(t)))))))))))))));
- } else if (t[10] == t[11]) {
- System.out.println("rx (R U2 R’ U’) (R U2) L’ U R’ U’ L");
- return L(Ui(Ri(U(Li(U(U(R(Ui(Ri(U(U(R(rx(t))))))))))))));
- }
- else if (t[4] != t[7] && t[4] != t[8] && t[11] != t[7] && t[19] != t[8]) {
- System.out.println("rx (F R U’) (R’ U’ R U) (R’ F’) (R U R’ U’) (R’ F R F’)");
- return Fi(R(F(Ri(Ui(Ri(U(R(Fi(Ri(U(R(Ui(Ri(Ui(R(F(rx(t))))))))))))))))));
- } else {
- System.out.println("(F R U’) (R’ U’ R U) (R’ F’) (R U R’ U’) (R’ F R F’)");
- return L(Ui(Ri(U(Li(U(U(R(Ui(Ri(U(U(R(t)))))))))))));
- }
- }
- public static char[] finishit(char[] t) {
- while (t[4] != t[12]) {
- t = U(t);
- System.out.println("U");
- }
- return t;
- }
- public static void main(String[] args) {
- System.out.println("Uneseni raspored na kocki");
- char[] r = "yooorbygwwbboyggwwbyrrgr".toCharArray();
- System.out.println(r);
- System.out.println();
- System.out.println("Pokreti za pravilnu orijentaciju kocke:");
- r = obrni(r); // orijentisi kocku sa wrb coskom jer po njima radi
- // prepoznavanje OLL
- System.out.println();
- System.out.println("Orijentisana kocka:");
- System.out.println(r); // odstampa okrenutu kocku
- System.out.println();
- System.out.println("Pokreti za orijentaciju posljednjeg layera");
- char[] oriented = prepoznajOLL(r);
- System.out.println();
- // System.out.println(prepoznajOLL(r)); // ako je slozena reci, inace
- // prepoznaj
- // odgovarajuci OLL algoritam
- System.out.println("Pokreti za permutaciju posljednjeg layera");
- char[] permuted = prepoznajPLL(oriented); // prepoznaj
- //odgovarajuci PLL
- // algoritam
- // kocka ce
- //biti obrnuta
- // naopako
- char[] finished = finishit(permuted);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement