Sudoku-Zahlen mischen[gelöst]
-
- 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]
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
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]
- 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
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).
-
- 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
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
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
-
- 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
Was genau, darf man denn unter "mischen" verstehen?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.
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
-
- Beiträge: 31
- Registriert: Fr 8. Jan 2010, 16:29
Re: Sudoku-Zahlen mischen
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
gemischt. (Unter FormCreate nicht Randomize; vergessen)
mfg camper3000
Auch wenn man einen Hammer hat, ist nicht jedes Problem ein Nagel.
-
- 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
Ich bin davon überzeugt, dass Quicksort (s.o.) da viel effektiver ist.
-Michael
-Michael
-
- Beiträge: 31
- Registriert: Fr 8. Jan 2010, 16:29
Re: Sudoku-Zahlen mischen
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!
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.