Einzelnen Beitrag anzeigen

Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Fehler bei Sudoku Korrektur

  Alt 15. Dez 2009, 10:32
Naja alternativ mit den Bits eines Integers rechnen?
Delphi-Quellcode:
function SpalteTesten(ASpalte : Integer) : Boolean;
const
  CARDINAL_POS : array [1..9] of Cardinal = (1, 2, 4, 8, 16, 32, 64, 128, 256);
  ALL_SET = 511;
var
  i : Integer;
  Werte : Cardinal; // Gibt es eine art UShortInt?
begin
  Werte := 0;
  for i := 0 to 8 do
  begin
    Werte := Werte or CARDINAL_POS[sudoku[<hier den wert :D>]];
  end;
  Result := Werte and ALL_SET = ALL_SET;
end;
Ich hoffe das geht so aber meine Idee war, dass du das n-te Bit auf 1 setzt, wenn die Zahl vorhanden ist. Und zum Schluss müsste dann dort irgendwie 0...0111111111 stehen (die 9 niedrigsten Bits stehen auf 1).
Dazu setzten wir in der Schleife das n-te Bit auf 1 indem wir den Wert vorher nehmen (ich betrachte erstmal nur die 9 niedrigsten Bits). Zum Beispiel sieht Werte vorher so aus:
000000000
Wenn dann im aktuellen Feld eine 3 steht, dann wird das 3. Bit auf 1 gesetzt:
000000100
Wenn wir dann wieder auf ein Feld mit einer 3 treffen passiert aber gar nichts mehr.

Und dann ganz zum Schluss überprüft er ob alle auf 1 stehen. Und zwar ist 111111111b = 511d (wenn ich mich irre). das heißt wir müssen nur die unteren 9 Bits betrachten. Dazu können wir and verwenden:
Code:
0..irgendwas..0111111111 and
000000000000000111111111 =
============================
000000000000000111111111
Weil bei add ist das Bit im Ergebnis nur 1, wenn die Bits in den beiden Werten 1 sind. Wenn dann das zweite und Ergebnis gleich sind, dann ist auch das obere mindestens so groß wie das obere. Ich weiß klingt ein bisschen komisch

Aber dafür gibt es ein ganz gutes Tutorial hier irgendwo.

MfG
Fabian

PS: Und wenn du Platz sparen willst kannst du satt 32 bit auch 16bit verwenden 9 bit würden reichen, aber sowas gibt es nicht
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat