AGB  ·  Datenschutz  ·  Impressum  







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

Sudoku Generator (Anfänge)

Ein Thema von xyss · begonnen am 23. Jan 2013 · letzter Beitrag vom 28. Jan 2013
 
xyss

Registriert seit: 9. Nov 2012
7 Beiträge
 
#6

AW: Sudoku Generator (Anfänge)

  Alt 26. Jan 2013, 07:41
Mittlerweile hab ich den Generator schon wieder etwas mehr verbessert(durchschnittlich ~5 Sekunden für ein Sudoku) aber meine Prozedur, welche die Zahlen aus dem vollständigen Sudoku herausziehen soll, funktioniert nicht wie sie soll...
Ich hab zum Thema Sudoku ein wenig "nachgeforscht", und es hieß, dass mindestens 7 der 9 Ziffern irgendwo in dem fertigen Sudoku vorhanden sein müssen, und es mindestens 17 Ziffern insgesamt sein müssen (ich hab in dem Fall 20 genommen). Ob noch mindestens 8 der 9 Zahlen im Spiel vorhanden sind, soll von der IsValid function überprüft werden. Und counter (der am Ende meiner FillUp prozedur auf 81 gesetzt wird) soll angeben, wieviele Ziffern sich noch im Sudoku-Spiel befinden.

Nun sind mir allerdings 2 Fehler aufgefallen:

1. IsValid scheint nie false zu sein (oder es war bisher nur Zufall), denn bei all meinen Versuchen hat die while-Schleife dadurch aufgehört, dass Counter zu klein ist.

2. Ich habe den Wert von Counter bei mehreren Versuchen überprüft, und mit dem Feld verglichen, und immer das gleiche Ergebnis: Counter ist 19, wobei sich im Feld noch 30-40 Ziffern befinden.

Erbitte Hilfe

Code:
  while ((IsValid(SG)=true) and (Counter>=20)) do
  begin
    Col:=random(9);
    Row:=random(9);

    temp:=SG.Cells[Col,Row];
    SG.Cells[Col,Row]:='';
    SG.Repaint;
    Counter:=Counter-1;
  end;
Code:
function TfrmMain.IsValid(SG:TStringGrid):boolean;
var
  Col,Row,n,CountNumber,Count:integer;
begin
  result:=true;
  Count:=0;

  for n:=1 to 9 do
  begin
    CountNumber:=0;
    for Col:=0 to 8 do
    begin
      for Row:=0 to 8 do
      begin
        if SG.Cells[Col,Row]=InttoStr(n) then
          inc(CountNumber,1);
      end;
    end;
    if CountNumber<>0 then
      inc(Count,1);
  end;
  if Count<=7 then result:=false;
end;
  Mit Zitat antworten Zitat
 


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 06:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz