function Y=SudokuShort(X) % wurde erstellt von Matthias Lalk Y = X; variable=[1 1 1 0 0]; %(1)Zeile, (2)Spalte, (3)eingesetzte Ziffer, (4)gnw[bestimmt die Bewegungsrichtung innerhalb der Matrix(1 bedeutet Korrektur => die Bewegunsrichtung ist rückwärts, 0 bedeutet kein Fehler => die Bewegungsrichtung ist vorwärts.] (5) Erfolg while variable(1) < 10 && variable(2) < 10%Schleife bis man sich durch die Matrix durchgearbeitet hat. if X(variable(1),variable(2)) == 0 if variable(4) == 1 if Y(variable(1),variable(2)) == 9 Y(variable(1),variable(2)) = 0; [variable(1),variable(2)] = zaehlen(variable(1),variable(2),1); continue else variable(3) = Y(variable(1),variable(2)) + 1; end end [variable(5)] = pruefen(variable(3), variable(1), variable(2), variable(5));%es werden sämtliche Werte ausprobiert und geprüft, bis eine passende Kombination gefunden ist. if variable(5) == 1 variable(5) = 0; variable(4) = 0; Y(variable(1),variable(2)) = variable(3); [variable(1),variable(2)] = zaehlen(variable(1),variable(2),-1); variable(3) = 1; else variable(4) = 1; Y(variable(1),variable(2)) = variable(3); end else if variable(4) == 1 [variable(1),variable(2)] = zaehlen(variable(1),variable(2),1); else [variable(1),variable(2)] = zaehlen(variable(1),variable(2),-1); end end end function [erf] = pruefen(variable3, variable1, variable2, erf)%hier wird überprüft, ob der ausgewählte Wert n einmalig in Reihe, Spalte und Sektor vorkommt. if (~isempty(find(Y(:,variable2)==variable3, 1))) return end if (~isempty(find(Y(variable1,:)==variable3, 1))) return end xx=variable2; yy=variable1; while (mod((xx-1),3) ~= 0) xx = xx - 1; end while (mod((yy-1),3) ~= 0) yy = yy - 1; end if (~isempty(find(Y(yy:yy+2,xx:xx+2)==variable3,1))) return end erf = 1; end function [variable1,variable2] = zaehlen(variable1,variable2,l) %in der Matrix je nach dem für l übergebenen Wert nach vorne oder nach hinten bewegen. variable2=variable2-1*l; if (variable2==0) variable2=9; variable1=variable1-1; elseif (variable2==10) variable2=1; variable1=variable1+1; end end end