Jump to content
Nokioteca Forum

Come Si Genera Un Sudoku?


masmil1988
 Share

Recommended Posts

Avevo postato la discussione in Off Topic, ma a quanto pare non è stata una buona idea, perchè non c'è stata nessuna risposta.

Avendo interesse a creare un generatore di Sudoku volevo sapere con quale logica vengono generati...

Anche se non conoscete il Sudoku vi spiego brevemente com'è formata la tavola, in modo da potermi aiutare lo stesso.

E' una tabella 9x9 che contiene in ogni riga tutti i numeri da 1 a 9, in ogni colonna tutti i numeri da 1 a 9 e in ogni tabella 3x3 tutti i numeri da 1 a 9.

In pratica i numeri non si ripetono mai nelle righe, nelle colonne e nelle mini-tabelle 3x3.

Ho provato una bozza ma mi si blocca sempre la creazione durante il ciclo, per una condizione che non si avvera mai, penso sia un problema di logica di fondo sbagliata...

Qualcuno che può aiutarmi ad arrivare alla soluzione?

Qua siamo nella sezione Programmazione e in teoria ci dovrebbe essere più passione nel fare i ragionamenti rispetto alla sezione Off topic...

Link to comment
Condividi su altri siti

Avevo postato la discussione in Off Topic, ma a quanto pare non è stata una buona idea, perchè non c'è stata nessuna risposta.

Avendo interesse a creare un generatore di Sudoku volevo sapere con quale logica vengono generati...

Anche se non conoscete il Sudoku vi spiego brevemente com'è formata la tavola, in modo da potermi aiutare lo stesso.

E' una tabella 9x9 che contiene in ogni riga tutti i numeri da 1 a 9, in ogni colonna tutti i numeri da 1 a 9 e in ogni tabella 3x3 tutti i numeri da 1 a 9.

In pratica i numeri non si ripetono mai nelle righe, nelle colonne e nelle mini-tabelle 3x3.

Ho provato una bozza ma mi si blocca sempre la creazione durante il ciclo, per una condizione che non si avvera mai, penso sia un problema di logica di fondo sbagliata...

Qualcuno che può aiutarmi ad arrivare alla soluzione?

Qua siamo nella sezione Programmazione e in teoria ci dovrebbe essere più passione nel fare i ragionamenti rispetto alla sezione Off topic...

io non sono capace a giocare a sudoku!!!!!

ma se ti compri delle riviste e copi il sudoku da lì non fai prima!!!!!!

Link to comment
Condividi su altri siti

Avevo postato la discussione in Off Topic, ma a quanto pare non è stata una buona idea, perchè non c'è stata nessuna risposta.

Avendo interesse a creare un generatore di Sudoku volevo sapere con quale logica vengono generati...

Anche se non conoscete il Sudoku vi spiego brevemente com'è formata la tavola, in modo da potermi aiutare lo stesso.

E' una tabella 9x9 che contiene in ogni riga tutti i numeri da 1 a 9, in ogni colonna tutti i numeri da 1 a 9 e in ogni tabella 3x3 tutti i numeri da 1 a 9.

In pratica i numeri non si ripetono mai nelle righe, nelle colonne e nelle mini-tabelle 3x3.

Ho provato una bozza ma mi si blocca sempre la creazione durante il ciclo, per una condizione che non si avvera mai, penso sia un problema di logica di fondo sbagliata...

Qualcuno che può aiutarmi ad arrivare alla soluzione?

Qua siamo nella sezione Programmazione e in teoria ci dovrebbe essere più passione nel fare i ragionamenti rispetto alla sezione Off topic...

ciao masmil! sul sito della mshell c'è uno script che genera sudoku, puoi prendere qualche spunto da lì b)

Link to comment
Condividi su altri siti

Quando programmavo in pascal c'era il problema delle 8 regine da risolvere.

Oggi c'è qualcosa di più complicao: il sudoku.

Il principio è lo stesso: la ricorsività (mi sembra si chiami così).

Praticamente devi inserire in

R1C1 il n. 1

R1C2 il n. 2

...

R1C9 il n. 9

Poi di nuovo per la riga 2:

R2C1 il n. 1 - ops non è possibile allora metto il 2

R2C2 il n.3

e così via.

Quando non puoi mettere nessuno dei 9 numeri devi salire alla posizione precedente e cambiare numero: se anche qui non puoi andare avanti devi salire e cambiare ancora numero fino a quando puoi metterne uno e ripetere il ragionamento fatto fin'ora.

Be, prima lo scrivi su carta e poi lo implementi altrimenti non penso che per natale ci riesci. b)

[edit]

R1C1 per chi non lo avesse capito = riga 1 colonna 1

Puoi partire da qualsiasi numero in R1C1 e quando vai a R1C2 parti sempre dal valore 1, se non lo puoi mettere metti 2, se non lo puoi mettere metti 3 e così via.

Puoi anche partire con R1C1=9 e affianco parti con un altro numero a piacere per fare un'altra combinazione.

Ogni volta che cambi partenza c'è una combinazione nuova.

Modificato da Oper
Link to comment
Condividi su altri siti

Grazie a tutti!

Grazie oper per il suggerimento!

Sono approdato a un'altra soluzione!!! b)

Il problema, data questa soluzione, sarebbe ora arrivare alla soluzione finale, perchè in pratica ottengo solo alcuni numeri di tutta la tabella, avendo cura che in una riga non si ripeta nessun numero, lo stesso in una colonna e lo stesso in una mini tabella...

Ho provato a mettere i numeri ottenuti in un risolutore di sudoku e sembra che riesca a risolverli tutti (ne ho provati 3 diversi), quindi in teoria dovrebbe essere tutto giusto b)

Vi farò sapere sugli sviluppi ;)

spero di lavorarci un po' su tra la notte (prima di andare a dormire) e negli attimi in cui non ho niente da fare.

Sto facendo tutto con mShell, sperando in un'uscita a breve del "famigerato" compilatore!!!

Link to comment
Condividi su altri siti

Grazie!!!

Ho un problema...

la teoria di buttare numeri ad muzzum (casuali) non funziona:

avevo provato a buttare pian piano numeri casuali nella tavola accertandomi di volta in volta che il numero non fosse già stato estratto nella colonna, nella riga e nella mini-tabella...

Ho messo la tavola venuta fuori in un risolutore di Sudoku e mi dice che è impossibile risolverla... b)

Con quale altro metodo si può fare?

per ora l'unico che mi viene in mente è questo:

1 2 3 4 5 6 7 8 9

7 8 9 1 2 3 4 5 6

4 5 6 7 8 9 1 2 3

9 1 2 3 4 5 6 7 8

6 7 8 9 1 2 3 4 5

3 4 5 6 7 8 9 1 2

8 9 1 2 3 4 5 6 7

5 6 7 8 9 1 2 3 4

2 3 4 5 6 7 8 9 1

Prendere una riga tra le prime 3 e scambiarla con una delle altre due, e ripetere poi la stessa cosa tra gli altri due gruppi (anche più volte per ogni gruppo se necessario).

Fare poi la stessa cosa con le colonne, dividendole sempre a gruppi di 3...

I numeri si mischiano, ma in ogni riga ho sempre la stessa serie di numeri, anche se scambiati di posto... b)

come si può mischiare ancora?

Modificato da masmil1988
Link to comment
Condividi su altri siti

Te l'ho già detto come risolvere,

devi partire dalla prima posizione e inserire un numero alla volta controllando con i precedenti se va bene o meno. Se non va bene devi sostituire il precedente e così via fino all'ultima casella.

Con la tabella postata che non va da 1 a 9 vuoi farci rincretinire?

Link to comment
Condividi su altri siti

Guardate questa tabella?

Vi sembra una buona tabella o notate qualche analogia tra i numeri? (tipo troppe simmetrie o cose del genere...)

mi sa che è un po troppo "analogico" tra i numeri

osserva i numeri 4 e 9 in orizzontale...se ci fai caso sono sempre vicini nelle striscie che vanno da 1-8 separati da 2 caselle dal 9 al 12, nella 13 e nella 15 da 3...e nella a4 e nella 16 da 4 caselle...

stesso problema in modo diverso per 1 e 2 che trovano la loro massima distanza nella 5 -6 -7 riga...e se guardi altre coppie di numeri succede lo stesso... b) io te lo avevo detto che qualcosa che non andava ci doveva essere..ora l'ho trovata ;)b)

Link to comment
Condividi su altri siti

b) facendo ricerche sui sudoku e osservandone vari ho visto che le analogie sono esistenti gia negli altri...quindi l'algoritmo da te trovato è quello giusto( a mio parere) anche perche ho notato che anche nelle colonne avviene questo...in poche parole come mio solito nn ho trovato nulla che gia non si doveva sapere!!! b)
Link to comment
Condividi su altri siti

Non prendo un sudoku già fatto, io genero il tutto!

Genero i numeri iniziali, genero la tabella iniziale e genero gli spostamenti casuali!

Non mi permetterei mai di prenderne uno già fatto da qualcun altro!

Comunque il lavoro procede a gonfie vele...

Non vi anticipo niente, però penso che tra qualche giorno lo posso già sputare fuori b)

Link to comment
Condividi su altri siti

Non prendo un sudoku già fatto, io genero il tutto!

Genero i numeri iniziali, genero la tabella iniziale e genero gli spostamenti casuali!

Non mi permetterei mai di prenderne uno già fatto da qualcun altro!

Comunque il lavoro procede a gonfie vele...

Non vi anticipo niente, però penso che tra qualche giorno lo posso già sputare fuori b)

Benissimo.

Link to comment
Condividi su altri siti

Tranquillo, ho finito ora con la grafica, penso non sia venuta proprio cattiva... b)

Sudoku 4x4mob

mainti3.jpg

E' già possibile:

- giocare una partita

- salvare una partita

- caricare una partita salvata, solo se questa si chiama cane b)

- uscire dal gioco

Manca da fare:

- caricare una partita (qualsiasi sia il suo nome)

- pagina delle istruzioni

- about

ci vuole ancora un po' di tempo, ma credo che non lo potrò continuare fino a domenica... ;)

Link to comment
Condividi su altri siti

Fammi capire, tu prendi un sudoku già realizzato e poi sposti solo le righe e le colonne?

E che gusto c'è a fare un'applicazione così.

Il generatore deve generare non modificare.

NO, ciò ke dicevo io era il fatto di creare un sudoku fittizio del tipo:

123

231

312

cioè mettendo i numeri in ordine...

poi x generarlo, basta ke invece di spostare un singolo numero, sposti intere colonne o righe....

CASUALMENTE...

in questo modo, non otterrai mai numeri doppi sulla stessa riga (o colonna...)

mi dixp solo aver dato il mio consiglio tardi, kmq non era un ragionamento difficilissimo eh b)

Link to comment
Condividi su altri siti

Non so sse avete mai visto un generatore di sudoku:

La partita di solito inizia con dei numeri messi a caso nella tabella e il giocatore deve completare.

Se non lo completa il giocatore lo deve completare come soluzione il programma.

Se non si trova il modo corretto di generarlo, non serve spostare le righe e le colonne.

1 . . . 3 . . . .

. . . 2 . . . . 4

. . . . . . . . . .

. . 5 . . . . . . .

...

e così via.

Link to comment
Condividi su altri siti

Please sign in to comment

You will be able to leave a comment after signing in



Accedi Ora
 Share

×
×
  • Crea Nuovo...

Informazione Importante

Questo sito utilizza i cookie per analisi, contenuti personalizzati e pubblicità. Continuando la navigazione, accetti l'utilizzo dei cookie da parte nostra | Privacy Policy