\mnb150ÿ{\rtf1\ansi\deff0\deftab720{\fonttbl{\f0\fswiss MS Sans Serif;}{\f1\froman\fcharset2 Symbol;}{\f2\fswiss\fprq2 System;}{\f3\fswiss\fprq2 Times New Roman;}{\f4\froman\fprq2 Times New Roman;}{\f5\fswiss\fprq2 Arial;}{\f6\fmodern\fprq1 Courier New;}{\f7\froman\fcharset1 Times New Roman;}{\f8\froman\fcharset1 Times New Roman;}} {\colortbl\red0\green0\blue0;\red0\green0\blue255;\red255\green255\blue0;\red255\green0\blue0;\red0\green128\blue0;\red255\green0\blue255;\red0\green255\blue255;\red0\green128\blue128;} \deflang1031\pard\plain\lang1033\f3\fs36\cf0\b Disentis \par \pard\ri4\plain\lang1033\f4\fs24\cf0 Dieses Spiel wurde in Disentis (Schweiz) erfunden, um eine lange Wartezeit zu verk\'fcrzen. Zerschneide dazu eine Postkarte in, \par sagen wir 5x5 Felder, und lege die einzelnen Teile verdeckt auf den Tisch. Das Ziel ist es alle Teile herumzudrehen, um das \par urspr\'fcngliche Bild wieder zu sehen. Ein Zug besteht darin ein noch verdecktes Teil auszuw\'e4hlen und alle Teile darumherum, \par also bis zu acht, zu wenden. Bereits offen liegende Teile k\'f6nnen dabei also wieder verdeckt werden! Das letzte verbleibende \par verdeckte Teil darf einzeln gewendet werden. \par \pard\plain\lang1033\f3\fs36\cf0\b Trisentis \par \plain\lang1033\f3\fs24\cf0 Nach ein wenig \'dcberlegung stellt man fest, dass die Bedingung, man m\'fcsse immer ein verdecktes Teil anw\'e4hlen, im Wesentlichen \par die Reihenfolge der Z\'fcge (und vielleicht einige sp\'e4ter r\'fcckg\'e4ngig zu machende Z\'fcge) bestimmt. Lassen wir diese weg! Au\'dferdem \par ist es nicht mehr notwendig ein letztes Teil einzeln wenden zu k\'f6nnen, und der Einfachheit halber verzichten wir auch auf diese \par Spezialregel. So erhalten wir das strukturell viel einfachere Spiel Trisentis. \par Erste grundlegende Feststellung zu dieser Spielvariante ist folgende: \plain\lang1033\f3\fs24\cf0\b Die Reihenfolge der Spielz\'fcge ist gleichg\'fcltig.\plain\lang1033\f3\fs24\cf0 \par \plain\lang1033\f3\fs36\cf0\b Darstellung \par \plain\lang1033\f3\fs24\cf0 Gegeben ist ein Spielfeld, das in kleinere Teile aufgeteilt ist. Dies k\'f6nnen wir leicht als Matrix darstellen. \par Zwei unterschiedliche Dinge sind von Interesse: \par \pard\li360\fi-360\tx360{\*\pn\pnlvlblt\pnf1\pnindent360{\pntxtb\'b7}}\plain\lang1033\f3\fs24\cf0 {\pntext\f1\'b7\tab}Der Zustand des Spielfeldes. Stellen wir mit 0 \plain\f3\fs24\cf0 (\plain\f3\fs24\cf1 blau\plain\f3\fs24\cf0 )\plain\lang1033\f3\fs24\cf0 ein offen liegendes und mit 1\plain\f3\fs24\cf0 (\plain\f3\fs24\cf2 gelb\plain\f3\fs24\cf0 )\plain\lang1033\f3\fs24\cf0 ein verdeckt liegendes Teil dar, \par \pard\li500\ri4\plain\lang1033\f3\fs24\cf0 so k\'f6nnen wir jeden Zustand notieren. Wir brauchen also hier Matrizen mit Eintr\'e4gen in \{0,1\}. \par \pard\li360\fi-360\tx360{\*\pn\pnlvlblt\pnf1\pnindent360{\pntxtb\'b7}}\plain\lang1033\f3\fs24\cf0 {\pntext\f1\'b7\tab}Die verwendeten Z\'fcge. Ein Abfolge von Z\'fcgen k\'f6nnen wir auch in einer Matrix notieren, da ja die Reihenfolge der Z\'fcge \par \pard\li500\ri4\plain\lang1033\f3\fs24\cf0 irrelevant ist. Ferner hebt sich ein doppelt gespielter Zug auf! Wenn wir eine 0 \plain\f3\fs24\cf0 (\plain\f3\fs24\cf4 gr\'fcn\plain\f3\fs24\cf0 )\plain\lang1033\f3\fs24\cf0 notieren f\'fcr ein nicht gespieltes Feld und \par eine 1 (\plain\lang1033\f3\fs24\cf3 rot\plain\lang1033\f3\fs24\cf0 ) f\'fcr ein gespieltes Feld, so m\'fcssen wir 1+1=0 rechnen, damit die Addition die Hintereinanderausf\'fchrung von Z\'fcgen wiedergibt. \par \pard\ri4\plain\lang1033\f3\fs24\cf0 Wir werden also beide Dinge durch Matrizen mit Eintr\'e4gen im K\'f6rper GF\plain\f3\fs24\cf0 (2)\plain\lang1033\f3\fs24\cf0 darstellen. Zur Ausgabe verwenden wir \par kleine \plain\lang1033\f3\fs24\cf3\b b\plain\lang1033\f3\fs24\cf4\b u\plain\lang1033\f3\fs24\cf1\b n\plain\lang1033\f3\fs24\cf5\b t\plain\lang1033\f3\fs24\cf6\b e\plain\lang1033\f3\fs24\cf0 Quadrate f\'fcr jeden Eintrag. \par \pard\plain\lang1033\f3\fs24\cf0 \'dcber die Spielregeln hinaus werden wir uns die Freiheit lassen, mit beliebigen Anfangszust\'e4nden und Zielzust\'e4nden zu arbeiten. \par \pard\ri4\plain\f5\fs28\cf0 \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f6\fs22\cf3 {\pntext\f1\'b7\tab}reset(): \par \pard\li600\ri1\fi-300\plain\f6\fs22\cf3 GF2:=Dom::IntegerMod(2): \par MatGF2:=Dom::SparseMatrix(GF2): \par GF2::print := GF2::expr: \par \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f6\fs22\cf3 {\pntext\f1\'b7\tab}plotmatrix:= proc(M, c0, c1, s) \par \pard\li600\ri1\fi-300\plain\f6\fs22\cf3 local i, j, c, L, dim; \par begin \par if args(0)<2 then c0:=RGB::Blue; c1:=RGB::Yellow; end_if; \par if args(0)<4 then s:=[0,0]; end_if; \par \par dim:= linalg::matdim(M); \par L:= table(); \par \par for i from 1 to dim[1] do \par for j from 1 to dim[2] do \par if iszero(M[i,j]) then \par c:= c0 \par else \par c:= c1 \par end_if; \par L[i,j]:= plot::Rectangle2d([ j-1/2+s[1], dim[1]-i+1/2+s[2]], 1, 1, \par Color = c, Filled = TRUE); \par if x<=6 and y<=6 then \par L[i,j]:=L[i,j],plot::Rectangle2d([ j-1/2+s[1], dim[1]-i+1/2+s[2]], 1, 1, Color = RGB::Black); \par end_if; \par end_for; \par end_for; \par \par plot::Scene(L[i,j] $ i = 1..dim[1] $ j = 1..dim[2], Axes = None, Scaling = Constrained); \par \par end_proc: \par \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f6\fs22\cf5 {\pntext\f1\'b7\tab}plotsolution:=proc( L ) \par \pard\li600\ri1\fi-300\plain\f6\fs22\cf5 begin \par P:=plotmatrix( L[1], RGB::Green, RGB::Red); \par for i from 1 to nops(L[2]) do \par P:=P,plotmatrix( L[2][i], RGB::Green, RGB::Orange, [i*(y+1),0] ); \par end_for; \par plot::Scene(map(P,op),map(P,x->op(x::options))); \par end_proc: \par \plain\f6\fs22\cf3 \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f6\fs22\cf3 {\pntext\f1\'b7\tab}zugdelta:= proc(a,b) \par \pard\li600\ri1\fi-300\plain\f6\fs22\cf3 local i,j,M; \par begin \par M:= MatGF2(x,y,0); \par for i from max(a-1,1) to min(a+1,x) do \par for j from max(b-1,1) to min(b+1,y) do \par if (i<>a or j<>b) \par then \par M[i,j]:= 1; \par end_if; \par end_for; \par end_for; \par return(M); \par end_proc: \par \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f6\fs22\cf3 {\pntext\f1\'b7\tab}x:=6: y:=6: \par \pard\li600\ri1\fi-300\plain\f6\fs22\cf3 zugdelta(3,4); \par plot(plotmatrix(%)); \par \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f6\fs22\cf3 {\pntext\f1\'b7\tab}zugdelta(3,4) + zugdelta( 3,2 ); \par \pard\li600\ri1\fi-300\plain\f6\fs22\cf3 plot(plotmatrix(%)); \par \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f6\fs22\cf3 {\pntext\f1\'b7\tab}zugdelta(3,4) + zugdelta( 4,5 ); \par \pard\li600\ri1\fi-300\plain\f6\fs22\cf3 plot(plotmatrix(%)); \par \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f6\fs22\cf3 {\pntext\f1\'b7\tab}zug:=proc( Z ) \par \pard\li600\ri1\fi-300\plain\f6\fs22\cf3 local i,j,S; \par begin \par S:=MatGF2(x,y); \par for i from 1 to x do \par for j from 1 to y do \par if not iszero(Z[i,j]) then \par S:=S+zugdelta(i,j); \par end_if; \par end_for; \par end_for; \par S; \par end_proc: \par \par \plain\f6\fs22\cf5 zeigezug:=proc( Z ) \par local S,P; \par begin \par S:=MatGF2(x,y); \par P:=plotmatrix(S),plotmatrix(Z,RGB::Green,RGB::Red,[y+1,0]); \par S:=S+zug( Z ); \par P:=P,plotmatrix(S,RGB::Blue,RGB::Yellow,[2*(y+1),0]); \par plot( plot::Scene(map(P,op),map(P,x->op(x::options))) ); \par end_proc: \par \plain\f6\fs22\cf3 \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f6\fs22\cf3 {\pntext\f1\'b7\tab}Z:=MatGF2( x,y, (i,j)->if i=3 and j=4 then 1 else 0 end_if ); \par \pard\li600\ri1\fi-300\plain\f6\fs22\cf3 zeigezug( Z ); \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f6\fs22\cf3 {\pntext\f1\'b7\tab}zeigezug( MatGF2(x,y,random(0..1)) ); \par \pard\ri4\plain\f7\fs22\cf0\b \par \par \par \par Brute force L\'f6sung\plain\f7\fs22\cf0 \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f6\fs22\cf3 {\pntext\f1\'b7\tab}Matrix2Vector:= proc(M) \par \pard\li600\ri1\fi-300\plain\f6\fs22\cf3 local v; \par begin \par // v:= type(M)([M[i,j] $ i = 1..linalg::matdim(M)[1] \par // $ j = 1..linalg::matdim(M)[2]]); \par MatGF2([op(M)]); \par end_proc: \par \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f6\fs22\cf3 {\pntext\f1\'b7\tab}Vector2Matrix:= proc(v) \par \pard\li600\ri1\fi-300\plain\f6\fs22\cf3 local M, i ,j; \par begin \par M:= type(v)(x,y): \par for j from 1 to y do \par for i from 1 to x do \par M[i,j]:= v[i + (j-1) * x]; \par end_for; \par end_for; \par return(M); \par end_proc: \par \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f6\fs22\cf3 {\pntext\f1\'b7\tab}bruteforce:=proc(X,Y) \par \pard\li600\ri1\fi-300\plain\f6\fs22\cf3 local A,b,L; \par begin \par x:=X; \par y:=Y; \par \par A:= linalg::concatMatrix(Matrix2Vector(zugdelta(i,j)) $ i = 1..x $ j = 1..y): \par b:= Dom::SparseMatrix(Dom::IntegerMod(2))([1 $ x*y]): \par \par L:= linalg::matlinsolve(A, b): \par if domtype(L) <> DOM_LIST then L:=[L,[]]; end_if: \par L[1]:= Vector2Matrix(L[1]): \par L[2]:= map(L[2], Vector2Matrix): \par \par print(Unquoted,"#L\'f6sungen = 2^".nops(L[2])." = ".(2^nops(L[2])) ); \par plot( plotsolution( L ) ); \par L; \par end_proc: \par \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f6\fs22\cf3 {\pntext\f1\'b7\tab}L:=bruteforce(4,4): \par {\pntext\f1\'b7\tab}zeigezug(L[1]); \par {\pntext\f1\'b7\tab}zeigezug(L[1]+L[2][3]); \par \pard\ri4\plain\f7\fs22\cf0 \par \par \plain\f7\fs22\cf0\b \par \par \par Beschleunige L\'f6sungsmethode\plain\f7\fs22\cf0 \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f6\fs22\cf5 {\pntext\f1\'b7\tab}loesefast:=proc(S) \par \pard\li600\ri1\fi-300\plain\f6\fs22\cf5 local i, j, Z; \par begin \par Z:=MatGF2(op(linalg::matdim(S))); \par for j from 1 to y-1 do \par for i from 1 to x-1 do \par if not iszero(S[i,j]) then \par S:=S+zugdelta(i+1,j+1); \par Z[i+1,j+1]:=Z[i+1,j+1]+1; \par end_if; \par end_for; \par if not iszero(S[x,j]) then \par S:=S+zugdelta(1,j+1); \par Z[1,j+1]:=Z[1,j+1]+1; \par end_if; \par for i from 1 to x-1 do \par if not iszero(S[i,j]) then \par S:=S+zugdelta(i+1,j+1); \par Z[i+1,j+1]:=Z[i+1,j+1]+1; \par end_if; \par end_for; \par if not iszero(S[x,j]) then \par S:=plotmatrix(S); \par plot( op(S), op(plotmatrix(Z,RGB::Green,RGB::Red,[y+1,0])), \par op(S::options) ); \par error( "... ".j.". Spalte ist nicht l\'f6sbar." ); \par end_if; \par end_for; \par return([S,Z]); \par end_proc: \par \par letzte:=proc(v) \par local S, Z, i, j; \par begin \par if linalg::matdim(v)<>[x,1] then \par error("Falsche Dimension"); \par end_if; \par S:=MatGF2(x,y); \par for i from 1 to x do \par if not iszero(v[i,1]) then \par S:=S+zugdelta(i,1); \par end_if; \par end_for; \par S:=loesefast(S); \par linalg::submatrix(S[1], 1..x, y..y ), S[2]; \par end_proc: \par \par alleletzten:=proc() \par local A,L,k,a; \par begin \par L:=[]; \par A:=MatGF2(x,x): \par for k from 1 to x do \par a:=letzte( MatGF2([(0$(k-1)),1,(0$(x-k))])); \par A:=linalg::substitute(A,a[1],1,k); \par L:=[op(L),a[2]]; \par end_for: \par [A,L]; \par end_proc: \par \par loese1:=proc( S ) \par local A,Z,L,z,Z1,i; \par begin \par S:=loesefast(S); \par Z:=S[2]; \par S:=S[1]; \par if not iszero(S) then \par A:=plotmatrix(S); \par plot( op(A), \par op(plotmatrix(Z,RGB::Green,RGB::Red, [y+1,0] )), \par op(A::options) ); \par print(Unquoted,"loesefast gen\'fcgt nicht! Brauchen alleletzten..."); \par end_if; \par A:=alleletzten(); \par // plot(plotmatrix(A[1],RGB::White,RGB::Black)); \par print(Unquoted,"Defekt alleletzten=".(linalg::matdim(A[1])[1]-linalg::rank(A[1]))); \par L:=linalg::matlinsolve( A[1], linalg::submatrix( S, 1..x, y..y ) ); \par if L=[] then \par error( "... so nicht l\'f6sbar." ); \par end_if; \par if domtype(L)<>DOM_LIST then L:=[L,[]]; end_if; \par \par z:=L[1]; \par Z1:=Z; \par for i from 1 to x do \par if not iszero(z[i,1]) then \par Z1[i,1]:=Z1[i,1]+1; \par Z1:=Z1+A[2][i]; \par end_if; \par end_for; \par L[1]:=Z1; \par S:=op([]); \par for z in L[2] do \par //z:=L[2][i]; \par Z1:=Z; \par for i from 1 to x do \par if not iszero(z[i,1]) then \par Z1[i,1]:=Z1[i,1]+1; \par Z1:=Z1+A[2][i]; \par end_if; \par end_for; \par S:=S,Z1; \par end_for; \par L:=[L[1],[S]]; \par end_proc: \par \par loese1xy:=proc( a, b ) \par local L; \par begin \par if x mod 3=2 then \par print("Warnung: x mod 3=2, manche Spalten nicht l\'f6sbar!"); \par end_if; \par // if x \par x:=a; \par y:=b; \par L:=loese1( MatGF2(x,y,1) ); \par print(Unquoted,"#L\'f6sungen = 2^".nops(L[2])." = ".(2^nops(L[2])) ); \par plot(plotsolution( L ) ); \par L; \par end_proc:\plain\f6\fs22\cf3 \par \par \pard\ri4\plain\f7\fs22\cf0\b \par \par \par \par Schnelle, verbesserte L\'f6sungsmethode\plain\f7\fs22\cf0 \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f6\fs22\cf7 {\pntext\f1\'b7\tab}loeseteilweise:=proc(S) \par \pard\li600\ri1\fi-300\plain\f6\fs22\cf7 local i, j, Z; \par begin \par Z:=MatGF2(op(linalg::matdim(S)),0); \par for s from 2 to x+y-2 do \par for i from max(1,s-y+1) to min(x-1,s-1) do \par j:=s-i; // 1<= j <=y-1 erzwingt s-y+1<= i=s-j <=s-1. \par if not iszero(S[i,j]) then \par S:=S+zugdelta(i+1,j+1); \par Z[i+1,j+1]:=Z[i+1,j+1]+1; \par end_if; \par end_for; \par end_for; \par return([S,Z]); \par end_proc: \par \par startfeld:=proc(k) \par local i,j; \par begin \par i:=1; j:=y+1-k; \par if j<1 then i:=2-j; j:=1; end_if; \par [i,j]; \par end_proc: \par \par zielfeld:=proc(k) \par local i,j; \par begin \par i:=k; j:=y; \par if i>x then i:=x; j:=x+y-k; end_if; \par [i,j]; \par end_proc: \par \par randzurand1test:=proc(k) \par local S,Z; \par begin \par S:=zugdelta(op(startfeld(k))); \par P:=plotmatrix(S); \par Z:=loeseteilweise(S); \par S:=Z[1]; Z:=Z[2]; \par P:=P,plotmatrix(Z,RGB::Green,RGB::Red,[y+1,0]), \par plotmatrix(S,RGB::Blue,RGB::Yellow,[2*y+2,0]); \par plot( plot::Scene(map(P,op),map(P,x->op(x::options))) ); \par return( [MatGF2([ S[op(zielfeld(k))] $ k=1..x+y-1 ]),Z] ); \par end_proc: \par \par randzurand1:=proc(k) \par local S,Z; \par begin \par S:=zugdelta(op(startfeld(k))); \par Z:=loeseteilweise(S); \par S:=Z[1]; Z:=Z[2]; \par return( [ MatGF2([ S[op(zielfeld(k))] $ k=1..x+y-1 ]), Z ] ); \par end_proc: \par \par randzurand:=proc() \par local Z,S; \par begin \par Z:=[ randzurand1(k) $ k=1..x+y-1 ]; \par [ \par linalg::concatMatrix(op( map( Z, x->op(x,1) ) )), \par map( Z, op, 2 ) \par ]; \par end_proc: \par \par loese2:=proc( S ) \par local A,Z,L,z,Z1,i; \par begin \par S:=loeseteilweise(S); \par Z:=S[2]; \par S:=S[1]; \par A:=randzurand(); \par // plot(plotmatrix(A[1],RGB::White,RGB::Black)); \par print(Unquoted,"Kerndimension(randzurand)=".(linalg::matdim(A[1])[1]-linalg::rank(A[1]))); \par \par L:=linalg::matlinsolve( A[1], MatGF2([ S[op(zielfeld(k))] $ k=1..x+y-1 ] ) ); \par if L=[] then \par error( "... so nicht l\'f6sbar." ); \par end_if; \par if domtype(L)<>DOM_LIST then L:=[L,[]]; end_if; \par \par z:=L[1]; \par Z1:=Z; \par for i from 1 to x+y-1 do \par if not iszero(z[i,1]) then \par startfeld(i); \par Z1[op(%)]:=Z1[op(%)]+1; \par Z1:=Z1+A[2][i]; \par end_if; \par end_for; \par L[1]:=Z1; \par S:=op([]); \par for z in L[2] do \par Z1:=Z; \par for i from 1 to x do \par if not iszero(z[i,1]) then \par startfeld(i); \par Z1[op(%)]:=Z1[op(%)]+1; \par Z1:=Z1+A[2][i]; \par end_if; \par end_for; \par S:=S,Z1; \par end_for; \par L:=[L[1],[S]]; \par end_proc: \par \par loese2xy:=proc( a, b, S ) \par local L; \par begin \par x:=a; \par y:=b; \par if args(0)>2 then \par L:=loese2( MatGF2(S) ); \par else \par L:=loese2( MatGF2(x,y,1) ); \par end_if; \par print(Unquoted,"#L\'f6sungen = 2^".nops(L[2])." = ".(2^nops(L[2])) ); \par plot(plotsolution( L ) ); \par L; \par end_proc: \par \plain\f6\fs22\cf3 \par \pard\ri4\plain\f7\fs22\cf0\b Beispiele\plain\f7\fs22\cf0 \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f6\fs22\cf3 {\pntext\f1\'b7\tab}st:=time(): \par \pard\li600\ri1\fi-300\plain\f6\fs22\cf3 L4_b:=bruteforce( 4,4 ): \par L4_btime:=(time()-st)*.001*sec; \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f6\fs22\cf3 {\pntext\f1\'b7\tab}st:=time(): \par \pard\li600\ri1\fi-300\plain\f6\fs22\cf3 L4_1:=loese1xy( x,y ): \par L4_1time:=(time()-st)*.001*sec; \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f6\fs22\cf3 {\pntext\f1\'b7\tab}st:=time(): \par \pard\li600\ri1\fi-300\plain\f6\fs22\cf3 L4_2:=loese2xy( x,y ): \par L4_2time:=(time()-st)*.001*sec; \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f6\fs22\cf3 {\pntext\f1\'b7\tab}st:=time(): \par \pard\li600\ri1\fi-300\plain\f6\fs22\cf3 L10_b:=bruteforce( 10,10 ): \par L10_btime:=(time()-st)*.001*sec; \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f6\fs22\cf3 {\pntext\f1\'b7\tab}st:=time(): \par \pard\li600\ri1\fi-300\plain\f6\fs22\cf3 L10_1:=loese1xy( x,y ): \par L10_1time:=(time()-st)*.001*sec; \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f6\fs22\cf3 {\pntext\f1\'b7\tab}st:=time(): \par \pard\li600\ri1\fi-300\plain\f6\fs22\cf3 L8_1:=loese1xy( 8,8 ): \par L8_1time:=(time()-st)*.001*sec; \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f6\fs22\cf3 {\pntext\f1\'b7\tab}st:=time(): \par \pard\li600\ri1\fi-300\plain\f6\fs22\cf3 L8_2:=loese2xy( x,y ): \par L8_2time:=(time()-st)*.001*sec; \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f6\fs22\cf3 {\pntext\f1\'b7\tab}st:=time(): \par \pard\li600\ri1\fi-300\plain\f6\fs22\cf3 L12_2:=loese2xy( 12,12 ): \par L12_2time:=(time()-st)*.001*sec; \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f6\fs22\cf3 {\pntext\f1\'b7\tab}st:=time(): \par \pard\li600\ri1\fi-300\plain\f6\fs22\cf3 L14_2:=loese2xy( 14,14 ): \par L14_2time:=(time()-st)*.001*sec; \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f6\fs22\cf3 {\pntext\f1\'b7\tab}st:=time(): \par \pard\li600\ri1\fi-300\plain\f6\fs22\cf3 L16_2:=loese2xy( 16,16 ): \par L16_2time:=(time()-st)*.001*sec; \par \pard\ri4\plain\f8\fs22\cf0 \par \par Noch eine L\'f6sung f\'fcr 6x6-Disentis (ohne Reihenfolge!) \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f6\fs22\cf3 {\pntext\f1\'b7\tab}bruteforceb:=proc(B) \par \pard\li600\ri1\fi-300\plain\f6\fs22\cf3 local A,b,L; \par begin \par x:=linalg::matdim(B)[1]; \par y:=linalg::matdim(B)[2]; \par \par A:= linalg::concatMatrix(Matrix2Vector(zugdelta(i,j)) $ i = 1..x $ j = 1..y): \par b:= Matrix2Vector(B): \par \par L:= linalg::matlinsolve(A, b): \par if domtype(L) <> DOM_LIST then L:=[L,[]]; end_if: \par L[1]:= Vector2Matrix(L[1]): \par L[2]:= map(L[2], Vector2Matrix): \par \par print(Unquoted,"#L\'f6sungen = 2^".nops(L[2])." = ".(2^nops(L[2])) ); \par plot( plotsolution( L ) ); \par L; \par end_proc: \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f6\fs22\cf3 {\pntext\f1\'b7\tab}bruteforceb( MatGF2(6,6,(i,j)->if i=6 and j=6 then 0 else 1 end_if) ); \par \pard\li600\ri1\fi-300\plain\f6\fs22\cf3 zeigezug( %[1] ); \par \pard\li300\ri5\fi-300{\*\pn\pnlvlblt\pnf1\pnindent300{\pntxtb\'b7}}\plain\f6\fs22\cf3 {\pntext\f1\'b7\tab} \par }