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 13. Jan 2011, 08:50
Ein Gedanke, der mir dazu noch gekommen ist. Wenn man das so rekursiv ausbaut, hat man dann die Funktion nicht u.U. sehr oft aufgerufen und im Speicher? Z.B. bei einem 9er Soduko 81 mal?

Ist das nicht schlecht für die Performane? Bin ja selber noch neu beim Programmieren, kann also sein, dass ich das überschätze und sowas bei heutiger Rechenpower egal ist.

In die selbe Kerbe gehauen. Wäre es nicht besser die Zahlen nicht direkt in einem Gitter zu speichern, sondern in einem zweidimensionalen Array und dann nur zum Schluß das Gitter aus dem Array zu füllen? A) Kostet das zeichnen immer Zeit und B) ist man dann offen, wie man das Sudoku darstellt, muss ja nicht unbeding ein Gitter sein...

Letzter Vorschlag: Sollte man nicht statt von einem 4er Sudoku zu sprechen, von einem 2x2 Sudoku sprechen? Damit ist die Zahl der kleinen Quadrate in dem großen Quadrat gemeint. Dies hätte den Vorteil, das man mit der Funktion nicht nur Quadratische Sudokus bauen könnte, z.B.:
2x3 Sudoku: Ist ein 6er Sudoku, d.h. Size = 36. Hat 6 kleine Unter-Blöcke (rede nicht mehr von Quadraten), 2 solcher Blöcke nebeneinander und davon dann 3 untereinander.

Das macht die Sache viel flexibler.
Ralph
  Mit Zitat antworten Zitat
hans ditter

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

AW: Sudoku Logik

  Alt 14. Jan 2011, 16:45
Also ich denke, dass 81 Funktionsaufrufe nacheinander nicht so das Problem darstellen dürften... sollte heute schon funktionieren, zumindest wenn man mal den Preis betrachtet . . .

Ansonsten: Ja, wäre wohl besser, die Zahlen in einem Array zu speichern, aber soweit war ich einfach noch nicht. Ich wollte das Programm erstmal zum Laufen bringen und dann weitere Funktionen einbauen (z.B. Array).
Zum letzten, ja, wäre auch 'ne Möglickeit, muss aber ehrlich sagen, dass ich noch nie von einem 2 x 3 Sudoku gehört habe. Es muss ja jede Zahl in jedem Block, in jeder Reihe und in jeder Spalte einmal vorkommen. Und das geht bei einem 2x3 Sudoku imho nicht mehr.

LG, hans ditter
RudiRüsselSeineSocketKomponente - SirRufo (--> Chat mit PM)

Delphi Programming is the best one!
  Mit Zitat antworten Zitat
schlecki

Registriert seit: 11. Apr 2005
Ort: Darmstadt
148 Beiträge
 
Delphi XE2 Enterprise
 
#3

AW: Sudoku Logik

  Alt 17. Jan 2011, 08:42
[...] muss aber ehrlich sagen, dass ich noch nie von einem 2 x 3 Sudoku gehört habe. Es muss ja jede Zahl in jedem Block, in jeder Reihe und in jeder Spalte einmal vorkommen. Und das geht bei einem 2x3 Sudoku imho nicht mehr.
doch, doch, das geht
Sind halt leichtere Sudokus (für Anfänger). Es gibt in diesen 2x3er Sudokus nur die Zahlen von 1-6...
  Mit Zitat antworten Zitat
Jumpy

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

AW: Sudoku Logik

  Alt 17. Jan 2011, 11:48
Hier mal als Beispiel was es so gibt.

http://www.roqa.de/html/sudoku.html
Ralph
  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 18. Jan 2011, 22:13
@Jumpy: 'Tschuldige, ich hatte viel zu tun die Tage. Ich häng nochmal das gesamte Projekt ran (ist nicht viel. Nur die Exe, die Projektdateien und die SudokuLogic-Unit, in der du dann auch die Überprüfun findest).

Würde mich freuen, wenn du da mal rüberschauen könntest!
Angehängte Dateien
Dateityp: zip Sudoku.zip (262,7 KB, 8x aufgerufen)
RudiRüsselSeineSocketKomponente - SirRufo (--> Chat mit PM)

Delphi Programming is the best one!
  Mit Zitat antworten Zitat
Jumpy

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

AW: Sudoku Logik

  Alt 19. Jan 2011, 13:51
Sieht schon ganz gut aus. Fehlerhaft ist mMn nur in der DigitIsOK der part der auf die Quadrate prüft. Hab mal Kommentare reingeschrieben, wie es mMn geändert werden müsste.

Jumpy

Delphi-Quellcode:
function DigitIsOK(i,Digit: integer):boolean;
var
  j,k: Integer;
  X,Y,SmallSize: integer;
begin
  X:=i mod Size;
  Y:=i div Size;
  Smallsize:=Trunc(sqrt(Size));
  //Hier reicht Smallsize:=sqrt(Size);
  //Da alles quadratisch ist. Wenn da irgendwas komisches rauskäme,
  //würde es eh nicht klappen, da nützt dann auch Trunc nichts.

  Result:=True;

  if not(Digit = 0) then
  begin
    for j := 0 to Size - 1 do //Reihen, Spalten
    begin
      if (Digit = StrToInt(Form1.Map.Cells[X,j])) OR
         (Digit = StrToInt(Form1.Map.Cells[j,Y])) then
        begin
          Result:=False;
          Break;
        end;
    end;
   //Der Part ist mMn OK.

    X:=i div SmallSize;
    Y:=i div SmallSize;
    for j := (SmallSize * X) to (SmallSize * X) do
   //Wenn du dir die Exe anguckst, siehst du, das die Quadrate nicht passen.
   //Das kommt daher, das die Schleife so nicht zählt, da Start und Ende gleich sind.
   //for j:= (SmallSize*X) to (SmallSize*X + SmallSize-1) //So müsste es richtig lauten
    begin
      for k := (SmallSize * Y) to (SmallSize * Y) do
      //Analog:
      //for k:= (SmallSize*Y) to (SmallSize*Y + SmallSize-1)
      begin
        if (Form1.Map.Cells[j,k] = IntToStr(digit)) AND ((j<>X) AND (k<>Y)) then
        begin
          Result:=false;
          Break;
        end;
      end;
    end;
  end
  else
    Result:=false;
end;
Ralph
  Mit Zitat antworten Zitat
hans ditter

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

AW: Sudoku Logik

  Alt 19. Jan 2011, 14:57
Super. Danke das du nochmal drüber geschaut hast.
Das mit Trunc() hab ich gemacht, weil Delphi mir sagte, dass Smallsize vom Typ Extended (oder so ähnlich) sein müsste. Deshalb Trunc(). Die Umwandlung einer Float zu einem Integer.

Das Andere probier ich nochmal aus!

LG, hans ditter
RudiRüsselSeineSocketKomponente - SirRufo (--> Chat mit PM)

Delphi Programming is the best one!
  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 03:36 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