Sudoku-Zahlen mischen[gelöst]

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
McCry
Beiträge: 42
Registriert: Mi 20. Jul 2011, 21:49
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Na Hier
Kontaktdaten:

Sudoku-Zahlen mischen[gelöst]

Beitrag von McCry »

Hi,
ich muss von der Schule aus ein Sudoku programmieren(ohne Lazarus).
Bis zur nächsten Stunde soll ich soweit sein, dass das Programm die Zahlen in dem Array"SFELD" von alleine mischt.
Zurzeit werden die Zahlenreihen einfach nur um drei Felder nach Links Verschoben.

Hoffe ihr habt nen vernünftigen Weg das zu lösen.
LG McCry
Zuletzt geändert von McCry am Mi 7. Dez 2011, 20:05, insgesamt 1-mal geändert.

Code: Alles auswählen

Signatur[color=#FF0000]:=[/color]McCry
Website[color=#FF0000]:=[/color][color=#0000FF]ritualist.bplaced.net[/color]

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6773
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Sudoku-Zahlen mischen

Beitrag von af0815 »

Ist das hier (Sudoku, Delphi Programmierpraktikum) für dich ein Ansatz ?
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Sudoku-Zahlen mischen

Beitrag von mschnell »

Wenn Du das selber programmieren willst und nicht irgendwo abkupfern, hier ein paar Stichpunkte für einen sehr allgemein verwendbaren Ansatz:

Zufallszahlen ziehen (Standard library-Funktion) ) und in eine TList von Records oder Objekten schreiben. Jedes Objekt besteht aus der Zufallszahl und einer Kennung für das Ziel-Element (z.B. das Sudoku-Feld). Die Kennungen natürlich auch in die Records schreiben.

Dann das Feld (mit der TList-Standard-Funktion) nach den Zufallszahlen sortieren und Du hast deine Element-Liste in zufälliger Reihenfolge.

Da der QuickSort-Algorithmus sehr flott ist und beim Sortieren der TLIst nur die Pointer und nicht die Elemente selbst geschrieben werden, ist das vermutlich schneller, als die meisten anderen Verfahren.

-Michael

martin_frb
Beiträge: 586
Registriert: Mi 25. Mär 2009, 21:12
OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
CPU-Target: mostly 32 bit

Re: Sudoku-Zahlen mischen

Beitrag von martin_frb »

McCry hat geschrieben:Hi,
ich muss von der Schule aus ein Sudoku programmieren(ohne Lazarus).
Bis zur nächsten Stunde soll ich soweit sein, dass das Programm die Zahlen in dem Array"SFELD" von alleine mischt.
Zurzeit werden die Zahlenreihen einfach nur um drei Felder nach Links Verschoben.
Was genau, darf man denn unter "mischen" verstehen?

1) Befindet sich in dem Array, ein gültiges Soduko? (mit allen Zahlen / ohne Lücken?)
2) Soll ein vorher leeres Array korrekt befüllt werden?

1a) Soll es nach dem mischen immer noch gültig seien, oder wird das nach der nächsten Stunde implementiert?

Man kann rein zufällig mischen (und Gültigkeit pruefen) oder man kann tricksen.
In einem gültigen array lassen sich bestimmte Operationen immer durchführen:

Vertauschen zweier kompletter Spalten/Zeilen, wenn diese in den selben Quadranten liegen. Z.B.
R1<>R2
R2<>R3
R4<>R5
aber NICHT R1<>R4 R1 geht durch die ganz linken Quadranten, R4 geht durch die mittleren Quadranten.


Oder, in spezial Fällen, lassen sich ausgewählte Paare in solchen Reihen/Spalten tauschen.
Alle getauschten Paare sind jeweils komplett in eienm quadrant, sowohl einer Spalte. Lediglich Reihen werden geändert, sind aber nach der Änderung wieder korrekt

Code: Alles auswählen

1  2 [3]   4  5 [6]   7  8 [9]
 4  5 [6]   7  8 [9]   1  2 [3]
 7  8  9    1  2  3    4  5  6
 
 2  3  4    5  6  7    8  9  1
 5  6  7    8  9  1    2  3  4
 8  9  1    2  3  4    5  6  7
 
 3  4  5    6  7  8    9  1  2
 6  7  8    9  1  2    3  4  5
 9  1  2    3  4  5    6  7  8

camper3000
Beiträge: 31
Registriert: Fr 8. Jan 2010, 16:29

Re: Sudoku-Zahlen mischen

Beitrag von camper3000 »

Mal davon ausgegangen das das entsprechende Array schon gefüllt ist, machst du einfach ne Zählschleife und vertauschst 10000 mal zwei Zufällige Elemente des Arrays.
gemischt. (Unter FormCreate nicht Randomize; vergessen)

mfg camper3000
Auch wenn man einen Hammer hat, ist nicht jedes Problem ein Nagel.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Sudoku-Zahlen mischen

Beitrag von mschnell »

Ich bin davon überzeugt, dass Quicksort (s.o.) da viel effektiver ist.

-Michael

camper3000
Beiträge: 31
Registriert: Fr 8. Jan 2010, 16:29

Re: Sudoku-Zahlen mischen

Beitrag von camper3000 »

Was willstn da sortieren?
Und warum quicksort?
Warum nicht Herbsort?
Bei der kleinen Menge könnte man auch Bubblesort nehmen...
Aber das mit dem Zeilen vertauschen ist eig die beste Lösung

Na dann, viel Glück!
Auch wenn man einen Hammer hat, ist nicht jedes Problem ein Nagel.

Antworten