Autor Beitrag
Mathematiker
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1652
Erhaltene Danke: 243

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: 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.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
    procedure EnpassantTest;
    //SW ist die Schrittweite zur naechsten Zeile 
    // ZielFeld ist das in der gleichen Reihe benachbarte Feld
    begin
      with Feld[ZielFeld], cBauer[Amzug] do
        //Steht dort ein gegnerischer Bauer
        if (Gestalt = Bauer) and (Farbe = Opponent) then
          // koennte der mit einem Doppelschritt dorthin gelangt sein
          if (Feld[ZielFeld + Sw].Gestalt = Leer) and
            (Feld[ZielFeld + 2*SW].Gestalt = Leer) then
          begin
            Inc(ZugNr);
            //den gegnerischen Bauern entfernen
            gblZug.Entferne := ZielFeld;
            gblZug.nach := ZielFeld + SW;//Auf den Platz davor stellen
            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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1652
Erhaltene Danke: 243

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 601
Erhaltene Danke: 339

W7
Delphi 6 pro
BeitragVerfasst: Di 04.02.14 18:26 
Moin Mathematiker,
in der Prozedur SucheZug muss eine kleine Änderung eingebaut werden:
ausblenden Delphi-Quelltext
1:
if (N=0or 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1652
Erhaltene Danke: 243

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1652
Erhaltene Danke: 243

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 601
Erhaltene Danke: 339

W7
Delphi 6 pro
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1652
Erhaltene Danke: 243

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Do 06.02.14 16:07 
Hallo,
user profile iconHorst_H hat folgendes geschrieben Zum zitierten Posting springen:
..., 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
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 662
Erhaltene Danke: 8

Windows 7
Delphi XE2
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1652
Erhaltene Danke: 243

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 662
Erhaltene Danke: 8

Windows 7
Delphi XE2
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1652
Erhaltene Danke: 243

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: So 09.02.14 17:51 
Hallo,

wenn es funktioniert, dann ist es ja gut.Aber user profile iconMathematikers Version ist noch 11x schneller ( unter Win7 )und user profile iconGuaAcks ~ 2,5-fach.
Das muss nicht sein ;-)

Gruß Horst
Fiete Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 601
Erhaltene Danke: 339

W7
Delphi 6 pro
BeitragVerfasst: Mi 12.02.14 12:51 
Moin,
habe jetzt die Stellungen von user profile iconMathematikerintegriert.
user defined image
Die Suchgeschwindigkeit muss ich noch verbessern :wink:
Gruß Fiete

_________________
Fietes Gesetz: use your brain (THINK)

Für diesen Beitrag haben gedankt: Mathematiker
Horst_H
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1652
Erhaltene Danke: 243

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 601
Erhaltene Danke: 339

W7
Delphi 6 pro
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1652
Erhaltene Danke: 243

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Fr 14.02.14 15:10 
Hallo,
user profile iconFiete hat folgendes geschrieben Zum zitierten Posting springen:
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