%Filip Jander 7/8/19 %Astrolabicon puzzle solver clear clc Asize = 8; A = 1:Asize; C = 1:Asize; C(1,1) = 2; C(1,2) = 1; %2 = rotate180 %1 = rotate %0 = shift possibleResults = zeros(size(A,2)*size(A,2),size(A,2)); for m = 1:size(A,2) for n = 1:size(A,2) if m == 1 B = A; if n ~= size(A,2) B([n (n+1)]) = B([(n+1) n]); else B([1 size(A,2)]) = B([size(A,2) 1]); end possibleResults(n,:) = B; else possibleResults((m-1)*size(A,2)+n,:) = shift(possibleResults(n,:),m-1); end end end counter = 0; foundIt = 0; resultsArray = zeros(2,10); resultsArray = resultsArray + 5; z = 0; while foundIt == 0 A = 1:Asize; for n = 1:size(resultsArray,2) x = fix(3*rand()); %prevent repeats if x == z if x == 2 x = 0; else x = x + 1; end end z = x; %prevents shift at start or end if (n == size(resultsArray,2) || n==1) && x == 0 x = x + 1; end %if x == 1 % x = 2; % z = x; %end if x < 1 y = fix((size(A,2)-1)*rand())+1; A = shift(A,y); resultsArray(1,n) = x; resultsArray(2,n) = y; elseif x < 2 y = fix((size(A,2)/2-1)*rand())+1; A = rotate(A,y); resultsArray(1,n) = x; resultsArray(2,n) = y; elseif x <3 A = rotate180(A); end resultsArray(1,n) = x; if n > 3 for k = 1:size(possibleResults,1) if A == possibleResults(k,:) %if A == C disp('win'); foundIt = 1; resultsArray(:,n+1:size(resultsArray,2)) = 0; break; end end end if foundIt == 1 break; end end counter = counter + 1; end resultsArray = fix(resultsArray) A function y = shift(x,shiftAmount) oldArray = x; y = zeros(1,size(x,2)); for n = 1:size(x,2) y(1,n) = oldArray(1,mod(n-1-shiftAmount,size(oldArray,2))+1); end end function y = rotate(x,shiftAmount) y = x; oldArray = x; rotateArray = zeros(1,size(oldArray,2)/2); for n = 1:size(oldArray,2)/2 if n <= size(oldArray,2)/4 rotateArray(1,n) = y(1,n); else rotateArray(1,n) = y(1,size(oldArray,2)/2-(n-size(oldArray,2)/4)+1); end end rotateArray = shift(rotateArray,shiftAmount); for n = 1:size(oldArray,2)/2 if n <= size(oldArray,2)/4 y(1,n) = rotateArray(1,n); else y(1,n) = rotateArray(1,size(oldArray,2)/2-(n-size(oldArray,2)/4)+1); end end end function y = rotate180(x) y = x; oldArray = x; for n = 1:size(oldArray,2)/4 y(1,n) = oldArray(1,n+size(oldArray,2)*2/4); end for n = size(oldArray,2)/2+1:size(oldArray,2)*3/4 y(1,n) = oldArray(1,n-size(oldArray,2)/2); end end