Wie man ja auch meinem Post zur Grundüberlegung von NakedSingles entnehmen kann, wollte ich es ja auch so machen, dass zuerst alle FeldMengen abgezogen werden und DANN die Restmenge überprüft wird, so wie du es vorgesclagen hast funktionierts
Delphi-Quellcode:
For Zeile:=0 to 8 do
For Spalte:=0 to 8 do
begin
RestMenge:=FeldMenge[Spalte,Zeile];
For Verschiebung:=1 to 8 do
begin
RestMenge:=RestMenge-FeldMenge[(Spalte+Verschiebung) mod 9,Zeile];
end;
For i:=1 to 9 do
If RestMenge=[i]
then
begin
StringGrid1.Cells[Spalte,Zeile]:=inttostr(i);
RestMengeNeuZuOrdnen(i,Spalte,Zeile);
end;
end;
Zitat von
Amateurprofi:
Die Geschichte mit der Verschiebung und Mod 9 finde ich nicht so glücklich. Ist unklar und teuer.....
Das verstehe ich nicht. Zwar ist deine Methode die einfachere (daher werd ich die auch dann nutzen), aber was soll unklar und teuer sein? Meinst du damit, dass beim Lesen des Quelltextes nicht sofort die Funktion davon klar wird oder was? Und funktionell sind die ja identisch, bloß wird bei mir als 1. die RestMenge der Zelle rechts daneben abgezogen und bei dir die RestMenge der Zelle ganz links.
Zitat von
Amateurprofi:
Und, nach RestMengeNeuZuOrdnen(i,Spalte,Zeile) meine ich sollte die Prüfung abgebrochen werden, weil sich die Voraussetzungen geändert haben.
Die If-Bedingung wird ja nur maximal 1-mal passiert, daher würde der then-Block nur einmal passiert werden. Wenn er passiert wurde, wird die If-Anfrage für alle restlichen i false.
Dein Exit würde nur 'etwas' Leistung sparen, oder?
PS: Heißt das then-Block, ich habe kurz überlegt ob ich Schleifenkörper schreibe, aber if ist ja keine Schleife ?