#! C:\Perl @master = ( 0, 'F1', 'F2', 'F3', 'F4', 'F5', 'F6', 'F7', 'F8', 'F9', 'B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8', 'B9', 'L1', 'L2', 'L3', 'L4', 'L5', 'L6', 'L7', 'L8', 'L9', 'R1', 'R2', 'R3', 'R4', 'R5', 'R6', 'R7', 'R8', 'R9', 'U1', 'U2', 'U3', 'U4', 'U5', 'U6', 'U7', 'U8', 'U9', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'D9' ); @copy = ( 0, 'F1', 'F2', 'F3', 'F4', 'F5', 'F6', 'F7', 'F8', 'F9', 'B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8', 'B9', 'L1', 'L2', 'L3', 'L4', 'L5', 'L6', 'L7', 'L8', 'L9', 'R1', 'R2', 'R3', 'R4', 'R5', 'R6', 'R7', 'R8', 'R9', 'U1', 'U2', 'U3', 'U4', 'U5', 'U6', 'U7', 'U8', 'U9', 'D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'D9' ); print 'Algorithm: '; $algorithm = ; chomp $algorithm; $algorithm =~ s/\s//gs; $char = "'"; $result = index($algorithm, $char); while ($result != -1) { $result--; $repchar = substr($algorithm, $result, 1); $algorithm =~ s/'/$repchar$repchar/s; $result = index($algorithm, $char); } $char = 2; $result = index($algorithm, $char); while ($result != -1) { $result--; $repchar = substr($algorithm, $result, 1); $algorithm =~ s/2/$repchar/s; $result = index($algorithm, $char); } $ph1 = 0; $ph2 = 0; $ph3 = 0; $ph4 = 0; $ph5 = 0; #ph = Place Holder $nr = 0; #nr = Number of Repetitions $length = length $algorithm; @tempalgo = (); @algo = (); while ($ph < $length){ $tempalgo[$ph] = substr($algorithm, $ph, 1); $ph++; } @algo = grep /F|B|L|R|U|D|2|'/, @tempalgo; sub F { $ph1 = $copy[7]; $ph2 = $copy[4]; $ph3 = $copy[21]; $ph4 = $copy[24]; $ph5 = $copy[27]; #Preservations $copy[21] = $copy[46]; $copy[24] = $copy[47]; $copy[27] = $copy[48]; #Down to Left $copy[48] = $copy[28]; $copy[47] = $copy[31]; $copy[46] = $copy[34]; #Right to Down $copy[28] = $copy[43]; $copy[31] = $copy[44]; $copy[34] = $copy[45]; #Up to Right $copy[43] = $ph5; $copy[44] = $ph4; $copy[45] = $ph3; #Left to Up $copy[7] = $copy[9]; $copy[9] = $copy[3]; $copy[3] = $copy[1]; $copy[1] = $ph1; #Corners $copy[4] = $copy[8]; $copy[8] = $copy[6]; $copy[6] = $copy[2]; $copy[2] = $ph2; #Edges } sub B { $ph1 = $copy[19]; $ph2 = $copy[22]; $ph3 = $copy[25]; $ph4 = $copy[10]; $ph5 = $copy[11]; #Preservations $copy[19] = $copy[39]; $copy[22] = $copy[38]; $copy[25] = $copy[37]; #Up to Left $copy[39] = $copy[36]; $copy[38] = $copy[33]; $copy[37] = $copy[30]; #Right to Up $copy[36] = $copy[52]; $copy[33] = $copy[53]; $copy[30] = $copy[54]; #Down to Right $copy[52] = $ph1; $copy[53] = $ph2; $copy[54] = $ph3; #Left to Down $copy[10] = $copy[16]; $copy[16] = $copy[18]; $copy[18] = $copy[12]; $copy[12] = $ph4; #Corners $copy[11] = $copy[13]; $copy[13] = $copy[17]; $copy[17] = $copy[15]; $copy[15] = $ph5; #Edges } sub L { $ph1 = $copy[1]; $ph2 = $copy[4]; $ph3 = $copy[7]; $ph4 = $copy[19]; $ph5 = $copy[20]; #Preservations $copy[1] = $copy[37]; $copy[4] = $copy[40]; $copy[7] = $copy[43]; #Up to Front $copy[37] = $copy[18]; $copy[40] = $copy[15]; $copy[43] = $copy[12]; #Back to Up $copy[18] = $copy[46]; $copy[15] = $copy[49]; $copy[12] = $copy[52]; #Down to Back $copy[46] = $ph1; $copy[49] = $ph2; $copy[52] = $ph3; #Front to Down $copy[19] = $copy[25]; $copy[25] = $copy[27]; $copy[27] = $copy[21]; $copy[21] = $ph4; #Corners $copy[20] = $copy[22]; $copy[22] = $copy[26]; $copy[26] = $copy[24]; $copy[24] = $ph5; #Edges } sub R { $ph1 = $copy[39]; $ph2 = $copy[42]; $ph3 = $copy[45]; $ph4 = $copy[28]; $ph5 = $copy[29]; #Preservations $copy[39] = $copy[3]; $copy[42] = $copy[6]; $copy[45] = $copy[9]; #Front to Up $copy[3] = $copy[48]; $copy[6] = $copy[51]; $copy[9] = $copy[54]; #Down to Front $copy[48] = $copy[16]; $copy[51] = $copy[13]; $copy[54] = $copy[10]; #Back to Down $copy[16] = $ph1; $copy[13] = $ph2; $copy[10] = $ph3; #Up to Back $copy[28] = $copy[34]; $copy[34] = $copy[36]; $copy[36] = $copy[30]; $copy[30] = $ph4; #Corners $copy[29] = $copy[31]; $copy[31] = $copy[35]; $copy[35] = $copy[33]; $copy[33] = $ph5; #Edges } sub U { $ph1 = $copy[19]; $ph2 = $copy[20]; $ph3 = $copy[21]; $ph4 = $copy[37]; $ph5 = $copy[38]; #Preservations $copy[19] = $copy[1]; $copy[20] = $copy[2]; $copy[21] = $copy[3]; #Front to Left $copy[1] = $copy[28]; $copy[2] = $copy[29]; $copy[3] = $copy[30]; #Right to Front $copy[28] = $copy[10]; $copy[29] = $copy[11]; $copy[30] = $copy[12]; #Back to Right $copy[10] = $ph1; $copy[11] = $ph2; $copy[12] = $ph3; #Left to Back $copy[37] = $copy[43]; $copy[43] = $copy[45]; $copy[45] = $copy[39]; $copy[39] = $ph4; #Corners $copy[38] = $copy[40]; $copy[40] = $copy[44]; $copy[44] = $copy[42]; $copy[42] = $ph5; #Edges } sub D { $ph1 = $copy[25]; $ph2 = $copy[26]; $ph3 = $copy[27]; $ph4 = $copy[46]; $ph5 = $copy[47]; #Preservations $copy[25] = $copy[16]; $copy[26] = $copy[17]; $copy[27] = $copy[18]; #Front to Left $copy[16] = $copy[34]; $copy[17] = $copy[35]; $copy[18] = $copy[36]; #Right to Front $copy[34] = $copy[7]; $copy[35] = $copy[8]; $copy[36] = $copy[9]; #Back to Right $copy[7] = $ph1; $copy[8] = $ph2; $copy[9] = $ph3; #Left to Back $copy[46] = $copy[52]; $copy[52] = $copy[54]; $copy[54] = $copy[48]; $copy[48] = $ph4; #Corners $copy[47] = $copy[49]; $copy[49] = $copy[53]; $copy[53] = $copy[51]; $copy[51] = $ph5; #Edges } sub faceturn { if ($algo eq 'L') { &L(); } elsif ($algo eq 'R') { &R(); } elsif ($algo eq 'U') { &U(); } elsif ($algo eq 'D') { &D(); } elsif ($algo eq 'F') { &F(); } elsif ($algo eq 'B') { &B(); } } sub check { for($index = 0; $index < @master; $index++){ $m = $master[$index]; $c = $copy[$index]; if ($c eq $m) { next; } if ($c ne $m) { &algorithm(); } } if ($index == 55) { print "Number of repetitions for $algorithm: $nr"; } } sub algorithm { foreach $algo (@algo) { &faceturn(); } $nr++; &check(); } &algorithm();