AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Sudoku Logik

Ein Thema von hans ditter · begonnen am 20. Dez 2010 · letzter Beitrag vom 7. Mär 2011
Antwort Antwort
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.740 Beiträge
 
Delphi 6 Enterprise
 
#1

AW: Sudoku Logik

  Alt 25. Jan 2011, 07:48
Hallo Hans,

in DigitIsOK, an der Stelle, wo das testen auf die kleinen Quadrate losgeht steht diese Zuweisung:

Delphi-Quellcode:
X:=i div SmallSize;
Y:=i div SmallSize;
Diese muss lauten (Hab ich vorher übersehen, sorry.):
Delphi-Quellcode:
X:=X div SmallSize;
Y:=Y div SmallSize;
Denn weiter oben (als du die Reihen und Spalten getestet hast) wird aus i die Position des Feldes, also X und Y berechnet. Abhängig von der Position (also X und Y) wird nun ermittelt in welchem Quadrat das Feld steht. Also die X und Y Position des Quadrates. Mit der obigen Änderung müsste das klappen. Da du von i statt von X oder Y ausgegangen bist, kamen auch die komischen Werte raus.

X und Y haben also für den Reihen- und Spaltentest und den Quadrattest unterschiedliche Bedeutung. Der übersicht halber solltest du sie daher anders nennen, z.B. qX und qY oder so:

Delphi-Quellcode:
qX:=X div SmallSize;
qY:=Y div SmallSize;

Natürlich das dann auch im darauf folgenden Quelltext ändern...

Damit sollte es doch jetzt klappen,
Jumpy
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Sudoku Logik

  Alt 25. Jan 2011, 08:22
Sry, ich habe mir jetzt nicht den ganzen Thread durchgelesen. Darum eine Frage, die sonst vlt. klar wäre: Wo genau liegt das Problem?

Ich habe vor einiger Zeit schon einmal ein Tool geschrieben, was Sudokus mit Hilfe von Kandidatenlisten löst. Auch ein komplett leeres Sudoku würde es natürlich lösen - mischt man vor jedem Feld die Kandidatenliste, kommt ein fertiges, gültiges und zufälliges Sudoku heraus. Man müsste nur noch die gewünschte Anzahl an Feldern leeren, die der "Benutzer" ausfüllen soll.
Hat das was mit dem Problem zu tun oder hab ich jetzt totalen OT geschrieben?
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.740 Beiträge
 
Delphi 6 Enterprise
 
#3

AW: Sudoku Logik

  Alt 25. Jan 2011, 15:32
Hallo Deep-Sea,

im Prinzip will Hans glaub ich was ähnliches erreichen wie du es beschreibst. Da er aber dabei lernen will geht er Schritt für Schritt an die Sache ran, d.h. er will keine fertige Lösung (Behaupte ich jetzt mal dreist).
Ich könnte mir aber vorstellen, dass er, wenn er fertig ist, deine Variante gerne mal sehen würde, um zu sehen was man alles anders und evtl. besser machen kann. Ich für meinen Teil würd deinen Ansatz auf jeden Fall gerne sehen, da ich auch noch viel lernen will (z.B. was Kandidatenlisten sind). Kann ich das hier im Forum finden? Mach mich heut Abend mal auf die Suche.

Auch geht es zunächst nur um ein Programm zum erstellen eines Sudokus, nicht zum lösen, wobei das Programm mit einigen minimalen Änderungen Sudokus auch lösen könnte, wenn es fertig ist und man ihm die schon bekannten Startwerte mitgibt (ahh sind das die Kandidatenlisten?).
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#4

AW: Sudoku Logik

  Alt 25. Jan 2011, 16:02
Ah ok.
Ich habe den Sourcecode von meinem Tool einfach mal angehängt. Es ist in D2009 geschrieben, aber ich habe glaube ich keine all zu außergewöhnlichen Dinge genutzt, so das es auch relativ problemlos mit anderen Delphi-Versionen laufen sollte.
Der Quelltext ist nicht kommentiert - falls also etwas unklar ist, fragt mich
Wie gesagt, das Tool ist eig. zum lösen gedacht. Wenn ihr ein neues Sudoku erstellen wollt, müsst ihr das alte löschen und dann auf "Auflösen" klicken.

So, nun zur Theorie:
Mit Kandidatenlisten meine ich, dass ich mir zu jedem freien Feld eine Liste mache, in der die möglichen Kandidaten stehen - also die Zahlen, die nach den Regeln für dieses Feld möglich wären. Anschließend nehme ich das Feld mit der kürzesten Kandidatenliste - die im Idealfall nur einen Eintrag enthält - und schreibe den ersten Eintrag ins Feld. Und das Spiel beginnt von vorne.
Sollte ich im Verlauf der Auflösung auf ein Feld stoßen, dass frei ist, aber kein Kandidat in frage kommt, so gehe ich einen Schritt rückwärts (klassisches Backtracking).
Für das erstellen habe ich die Funktion "ShuffleCandidates" eingeführt, damit die Kandidaten zufällig ausgewählt werden und nicht der Reihe nach.
Angehängte Dateien
Dateityp: zip Sudoku by Deep-Sea.zip (3,3 KB, 9x aufgerufen)
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
hans ditter

Registriert seit: 25. Jun 2010
Ort: Niedersachsen
263 Beiträge
 
Turbo Delphi für Win32
 
#5

AW: Sudoku Logik

  Alt 30. Jan 2011, 15:19
Hallo alle zusammen,

sorry, dass ich erst jetzt schreib. Die Schule frisst einen auf...
Ich hab den Quellcode nach euren Angaben verbessert. Jetzt scheint es auch zu funktionieren. Allerdings kommt zwischendurch mal ein Sudoku, wo die letzte Reihe nur mit Nullen gefüllt ist. Ich häng das Projekt nochmal ran.

Wenn ihr möchtet, könnt ihr ja gerne auch nochmal testen, ob das bei euch auch funktioniert... würde mich freuen!

LG, hans ditter
Angehängte Dateien
Dateityp: zip Sudoku.zip (274,2 KB, 23x aufgerufen)
RudiRüsselSeineSocketKomponente - SirRufo (--> Chat mit PM)

Delphi Programming is the best one!
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#6

AW: Sudoku Logik

  Alt 4. Mär 2011, 08:57
Was gibt es neues an der Sudoku-Front?
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.740 Beiträge
 
Delphi 6 Enterprise
 
#7

AW: Sudoku Logik

  Alt 4. Mär 2011, 10:31
In der letzten Version gibt es einen Logikfehler irgendwo, aber ich konnte ihn nicht finden.
Hab mal die Ideen von Hans in einer abgewandelten Version eingebaut. Kommt nicht an deine damalige Version dran, aber Hans (und mir auch) ging es glaub ich um den Lerneffekt. Meine Variante scheint zu laufen, drum häng ich sie mal hier an.
Angehängte Dateien
Dateityp: zip mSudoku.zip (229,4 KB, 15x aufgerufen)
Ralph
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz