Autor |
Beitrag |
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: So 02.02.14 23:35
Hallo,
die Variante von Horst ist ziemlich schnell, sehr schön.
Ich hänge einmal eines meiner Lieblingsprobleme von Loyd an. Dieser Dreizüger ist eigentlich nicht sonderlich schwierig, hat aber eine interessante Lösung.
Fietes Programm findet b7a8 mit Umwandlung in eine Dame. Das geht aber nicht, da dann Schwarz nicht mehr ziehen kann und die Partie Patt endet.
Beste Grüße
Mathematiker
Einloggen, um Attachments anzusehen!
|
|
Horst_H
Beiträge: 1652
Erhaltene Danke: 243
WIN10,PuppyLinux
FreePascal,Lazarus
|
Verfasst: Mo 03.02.14 00:17
Hallo,
Ich habe enpassant so umgeschrieben.Aus der Stellung selbst kann man den letzten ja Zug nicht erkennen und er wird bei den Stellungen wohl auch nicht angegeben, die in ihren Aufbau auch wie hingestellt und nicht "erspielt" aussehen.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure EnpassantTest; begin with Feld[ZielFeld], cBauer[Amzug] do if (Gestalt = Bauer) and (Farbe = Opponent) then if (Feld[ZielFeld + Sw].Gestalt = Leer) and (Feld[ZielFeld + 2*SW].Gestalt = Leer) then begin Inc(ZugNr); gblZug.Entferne := ZielFeld; gblZug.nach := ZielFeld + SW; ZL[ZugNr] := gblZug; end; end; |
wDame g7-e7 -> sBauer g4xh3 e.p und es dauert länger, weil der König ein bisschen Platz bekommt.
Man kann die Suche, ob man sich selbst mit einem Zug ins Schach begibt, bei der Erstellung der ZugListe etwas verbessern.
Zu Beginn einmal komplett untersuchen.Stehe ich schon im Schach, muß ich wohl erst einmal jeden Zug komplett untersuchen.
Steht man nicht im Schach wird es einfacher.
Wenn man nicht den König selbst bewegt muss man nur den Quadranten, der aus dem König (= Ursprung ) und der bewegten Figur besteht untersuchen.
Dann ergeben sich schöne Dinge wie:
Gegnerische Springer brauche ich nicht untersuchen.
Nur wenn König und Figur auf einer Diagonale liegen, kann dort eine Dame oder Läufer der "hinter" der bewegten Figur liegt gefährlich werden.Das gleiche gilt für Zeile oder Spalte, mit Dame und Turm.
Maximal eine Richtung Zeile oder Spalte oder Diagonale muss untersucht werden.
Das könnte ein wenig Zeit sparen.
zu loyd3:
Da stimmt wohl was mit der Programmlogik von Patt nicht.Heute nicht mehr ...
Gruß Horst
|
|
Horst_H
Beiträge: 1652
Erhaltene Danke: 243
WIN10,PuppyLinux
FreePascal,Lazarus
|
Verfasst: Di 04.02.14 10:53
Hallo,
Bei Loyd3 ergibt sich etwas merkwürdiges, der König stellt sich frech ins Schach, wird aber nicht geschlagen.
(über 50000 Zeilen im Memo )
wDame b7 - b8/sKönig h1 x g2/wTurm e1 - a1/sLäufer g1 - c5/wKönig h4 - g5/
Das dies in meiner Version passiert, könnte an einer falschen Zuweisung, wo die Könige gerade sind, liegen, aber bei Fietes Original wird doch der König jedesmal gesucht.
Wird sich schon finden...
Gruß Horst
|
|
Fiete
Beiträge: 601
Erhaltene Danke: 339
W7
Delphi 6 pro
|
Verfasst: Di 04.02.14 18:26
Moin Mathematiker,
in der Prozedur SucheZug muss eine kleine Änderung eingebaut werden:
Delphi-Quelltext 1:
| if (N=0) or Schwarz_im_Patt(F,Amzug)then AlphaBeta:=Wert(F,Amzug) |
jetzt wird der Bauer in einen Springer umgewandelt.
Gruß Fiete
_________________ Fietes Gesetz: use your brain (THINK)
Für diesen Beitrag haben gedankt: Mathematiker
|
|
Horst_H
Beiträge: 1652
Erhaltene Danke: 243
WIN10,PuppyLinux
FreePascal,Lazarus
|
Verfasst: Di 04.02.14 22:08
Hallo,
ich hoffe, ich habe es richtig eingebaut.
Die Speicherung des Spielzuges stimmt immer noch nicht.
Ich habe die Handhabung etwas geändert.
Wenn man den Zug spielt, wird automatisch die Spielfarbe umgeschaltet und man kann mittels <Enter> eine Erwiderung anzeigen lassen.
SpinEdit habe ich entfernt.Plötzlich meckert Turbo Delphi drüber.
Die Laufzeiten nehmen schlagartig zu, da erheblich öfter (~ 80% ) GenZugListe aufgerufen wird.
Gruß Horst
Zuletzt bearbeitet von Horst_H am Mi 05.02.14 10:48, insgesamt 1-mal bearbeitet
|
|
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Di 04.02.14 23:16
Hallo,
wahrscheinlich bin ich wohl hier der "Nörgler". Es tut mir auch leid, aber das angehängte Problem "alpha5" wird gar nicht gelöst, jeden Falls war nach 15 Minuten keine Lösung da.
Der Name "alpha5" kommt von der mathematischen DDR-Schülerzeitschrift "Alpha", wo viele Schachprobleme veröffentlicht wurden, allerdings ohne Angabe des Entwicklers.
Die korrekte Lösung wäre d7-d8=L mit Mattdrohung Lf6, was mein eigenes Programm nach 9s auswarf.
Die weitere Zugfolge ist zwangsweise - Td6xd8 ; c7xd8=L - Td2xd8 ; b7-b8=L - Td8xb8 ; a7xb8=L - Lg8xf7 und Matt mit Lb8xe5+.
Beste Grüße
Mathematiker
Einloggen, um Attachments anzusehen!
Für diesen Beitrag haben gedankt: Horst_H
|
|
Horst_H
Beiträge: 1652
Erhaltene Danke: 243
WIN10,PuppyLinux
FreePascal,Lazarus
|
Verfasst: Mi 05.02.14 10:57
Hallo,
falscher Fehler von mir
Ich hatte in .Wert
IF (Amzug= schwarz) AND Schattmatt(Felf,schwarz) then
Ohne (Amzug= schwarz) klappt es.
Ich denke, man müßte nur noch auf Schwarz_Im_Schach testen, den es wird zuvor immer auf Schwarz_im_Patt getestet, dann wäre der wäre GenZugliste etwas weniger häufig aufzurufen.
Gruß Horst
Edit:
Ich habe es mal eingebaut. Damit sind es nun 0.27 Sekunden für Brehmer3 ( nur noch ~1E5 Stellungen zu prüfen) und fast 68 Sekunden für alpha5.
Wenn mathematikers Version das schon in 9 Sekunden erledigt, läuft hier etwas grundsätzlich falsch.
Selbst ohne Bitboard würde ich jeder Figur ihr Koordinaten zuordnen und ob sie den König überhaupt bedroht und könnte, also Dame auf selber Diagonale/Zeile/Spalte oder Bauer eine Reihe dahinter oder so ähnlich.
Wenn ich die Zugliste damit generieren fallen dann enorm viele Dinge innerhalb des Tests auf Schach weg und verkürzen sich auf relevante Richtungen.
Einloggen, um Attachments anzusehen!
Für diesen Beitrag haben gedankt: Mathematiker
|
|
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Mi 05.02.14 20:02
Hallo Horst,
ich werde mir Dein Programm sofort ansehen.
Ohne Fiete Konkurrenz machen zu wollen, habe ich unter www.entwickler-ecke.....php?p=683974#683974 jetzt mein ganzes Schachprogramm angehängt, d.h. auch den Teil zum Problemschach.
Mit diesem Programm habe ich die genannten 9s für alpha5 erreicht.
Die Erklärung des Programmteils findest Du im genannten Link.
Beste Grüße
Mathematiker
|
|
Fiete
Beiträge: 601
Erhaltene Danke: 339
W7
Delphi 6 pro
|
Verfasst: Do 06.02.14 15:13
Moin Mathematiker,
Du sorgst indirekt für Verbesserungen bei Horst und mir.
Dein Schachprogramm habe ich schon im Programm "bhv Winfunktion Mathematik plus 17" benutzt,
der Zugriff auf die beigefügten Stellungen wäre schön, dann könnte ich sie konvertieren.
"alpha5" bereitet mir ein Problem, ich habe den ersten Zug per Hand erledigt.
Matt in 4 Zügen wird in 2,5s errechnet.
Jetzt muss ich nach der Ursache suchen die das Finden des Schlüsselzuges verhindert.
Gruß Fiete
_________________ Fietes Gesetz: use your brain (THINK)
|
|
Horst_H
Beiträge: 1652
Erhaltene Danke: 243
WIN10,PuppyLinux
FreePascal,Lazarus
|
Verfasst: Do 06.02.14 15:36
Hallo,
meine angepasste Version von gestern hat die Stellung alpha 5 auch dabei und löst sie auch, aber es dauert über eine Minute.
www.entwickler-ecke....ownload.php?id=16357
Ohne HexEditor kann man wohl nichts machen, aber vielleicht verrät Mathematiker den Aufbaus der *.c00 Datei.
Gruß Horst
|
|
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Do 06.02.14 16:07
Hallo,
Horst_H hat folgendes geschrieben : | ..., aber vielleicht verrät Mathematiker den Aufbaus der *.c00 Datei. |
Selbstverständlich.
Es ist nur eine gezipte Textdatei, im Anhang als txt. Der Aufbau ist einfach.
Jedes Problem:
1.Zeile: Entwickler, Jahr, Anzahl Züge
2.Zeile: Anzahl Züge als ganze Zahl
3.Zeile: Anfangsstellung als String, beginnend links oben bei A8 reihenweise bis links unten bei H1.
Allerdings ist zu beachten, dass ich die englische Abkürzung wähle, d.h.
R für rook = Turm , K für knight = Springer , B für Bishop = Läufer, Q für queen = Dame , K für king = König und P für pawn = Bauer.
Großbuchstaben sind weiße Figuren, Kleinbuchstaben schwarze.
Beste Grüße
Mathematiker
Einloggen, um Attachments anzusehen!
Für diesen Beitrag haben gedankt: Fiete
|
|
Hochhaus
Beiträge: 662
Erhaltene Danke: 8
Windows 7
Delphi XE2
|
Verfasst: Sa 08.02.14 19:06
Ich habe das Programm ausprobiert. Eine Super-Leistung !
Zwei Sachen sind mir aufgefallen, die man noch verbessern könnte: Es können mehrere gleichfarbige Könige aufs Brett gesetzt werden. Und: Eine Pattsituation, in der der schwarze König nicht mehr ziehen kann, wird als Matt eingestuft.
Grüsse,
Hochhaus
|
|
Horst_H
Beiträge: 1652
Erhaltene Danke: 243
WIN10,PuppyLinux
FreePascal,Lazarus
|
Verfasst: Sa 08.02.14 23:58
Hallo,
Zitat: | Eine Pattsituation, in der der schwarze König nicht mehr ziehen kann, wird als Matt eingestuft. |
wenn Du meine letzte Version benutzt hast, wäre das mein Logik-Fehler in der.
Kannst Du mir ein kleines Beispiel geben, wo dem so ist?
Gruß Horst
|
|
Hochhaus
Beiträge: 662
Erhaltene Danke: 8
Windows 7
Delphi XE2
|
Verfasst: So 09.02.14 10:02
Weiss: Ke6, Df2
Schwarz: Kh8
Matt in zwei Zügen: Lösung: Df7 --> Patt
Hochhaus
Edit: Sorry. War nicht die neuste Version, sondern die zweitneuste. Jetzt funktioniert es.
|
|
Horst_H
Beiträge: 1652
Erhaltene Danke: 243
WIN10,PuppyLinux
FreePascal,Lazarus
|
Verfasst: So 09.02.14 17:51
Hallo,
wenn es funktioniert, dann ist es ja gut.Aber Mathematikers Version ist noch 11x schneller ( unter Win7 )und GuaAcks ~ 2,5-fach.
Das muss nicht sein
Gruß Horst
|
|
Fiete
Beiträge: 601
Erhaltene Danke: 339
W7
Delphi 6 pro
|
Verfasst: Mi 12.02.14 12:51
Moin,
habe jetzt die Stellungen von Mathematikerintegriert.
Die Suchgeschwindigkeit muss ich noch verbessern
Gruß Fiete
_________________ Fietes Gesetz: use your brain (THINK)
Für diesen Beitrag haben gedankt: Mathematiker
|
|
Horst_H
Beiträge: 1652
Erhaltene Danke: 243
WIN10,PuppyLinux
FreePascal,Lazarus
|
Verfasst: Do 13.02.14 10:42
Hallo,
ich habe mal alpha 1987 ( 6 Züge ) probiert.
Da wird keine Lösung gefunden:
wKoenig f3-g4 und dann w i6 x d0 e.p.
Ist das Feld nicht richtig initialisiert? i6 müsste Gestalt=illegal sein.Aber dann d0?
Die Version vom 2.2. findet keinen Zug.
Es wäre doch eine schöne Sache, die vorgegebene Liste an Stellungen nach Zugzahl zu sortieren.
Hilfreich wäre auch ein Testablauf, in dem der Lösungszug angegeben ist.
Alles nicht so einfach Nachher habe ich das falsche eingegeben, dennoch i6 sollte irgendwie nicht vorkommen.
Gruß Horst
Einloggen, um Attachments anzusehen!
|
|
Fiete
Beiträge: 601
Erhaltene Danke: 339
W7
Delphi 6 pro
|
Verfasst: Do 13.02.14 15:55
Moin Horst_H,
habe die gleichen Ergebnisse erhalten.
Nachdem ich selbst gespielt habe(ich war Schwarz), war ich in 3 Zügen matt!
Im Programm geändert, schon kam die richtige Lösung.
Es sind wohl nicht alle Schachprobleme korrekt, z.B. Troitzky 1951 (1 Zug)
Deinen Vorschlag die Liste nach Zügen zu sortieren werde ich überdenken.
Gruß Fiete
_________________ Fietes Gesetz: use your brain (THINK)
|
|
Horst_H
Beiträge: 1652
Erhaltene Danke: 243
WIN10,PuppyLinux
FreePascal,Lazarus
|
Verfasst: Fr 14.02.14 11:42
Hallo,
eine neue Version von mir.
Ich habe ja innerhalb von GenZugListe den Test auf Patt und Schachmatt eingebaut.
Dadurch konnte ich ja in SucheZug auch die Erstellung der neuen Zugliste vorziehen, wodurch GenZugliste nur noch in 25% der Fälle aufgerufen wurde.
Dann kam mir die Idee, ich muss ja nicht auf Patt testen, sondern einfach auf Anzahl der möglichen Züge = 0, da ist Patt sowie Schachmatt enthalten.
Dummerweise spielt dann aber das Programm für schwarz völlig idiotisch.Ein Fünfzüger wird zum Zweizüger ( Buehler5 )
wDame g4-d7/ sBauer e7-e6/ wDame d7-d6 #
Gruß Horst
Einloggen, um Attachments anzusehen!
Für diesen Beitrag haben gedankt: Mathematiker
|
|
Mathematiker
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Fr 14.02.14 15:10
Hallo,
Fiete hat folgendes geschrieben : | Es sind wohl nicht alle Schachprobleme korrekt, z.B. Troitzky 1951 (1 Zug) ... |
Tut mir leid. Die zwei Einzüger und der 12-Züger sind garantiert nicht richtig.
Beste Grüße
Mathematiker
|
|
|