Aggiunta di un'altra risposta per generare un sudoku della difficoltà desiderata al volo.
Ciò significa che, a differenza di altri approcci l'algoritmo esegue sola volta e restituisce una configurazione sudoku corrispondenza della difficoltà desiderato (con elevata probabilità di un intervallo o con probabilità = 1)
varie soluzioni per la generazione (e valutazione) una difficoltà di sudoku ha a che fare con human-based techniques and approaches, che può essere facilmente valutato.
Poi uno (dopo aver generato una configurazione sudoku) ri-risolve il sudoku con il risolutore di tipo umano e seconda delle tecniche del risolutore utilizzato (es coppie, x-ala, spada ecc.) viene anche assegnato un tasso di difficoltà.
problemi con questo approccio (e requisiti per il caso d'uso che ho avuto)
Per generare un sudoku con data difficoltà, con metodo precedente si ha la necessità di risolvere un sudoku due volte (una volta con l'algoritmo di base e una volta con il risolutore simile all'uomo).
Uno deve (pre) generare molti sudoku che possono essere valutati in base alla difficoltà dopo il risolutore di tipo umano. Quindi non è possibile generare immediatamente un sudoku desiderato al volo.
Il risolutore di tipo umano può essere complicato e nella maggior parte dei casi (se non tutti) è strettamente accoppiato a griglie di sudoku 9x9. Quindi nessuna facile generalizzazione ad altri sudoku (ad esempio 4x4, 16x16, 6x6 ecc.)
Il grado di difficoltà delle tecniche umane è molto soggettivo. Ad esempio, perché x-wing è considerato più difficile di single nascosti? (Personalmente hanno risolto molti difficili pubblicati puzzle Sudoku manualy e mai utilizzato tali tecniche)
Un altro approccio è stato utilizzato, che ha i seguenti vantaggi:
- generalizza bene a sudoku arbitraria (9x9, 4x4, 6x6 16x16 ecc.
- La configurazione di sudoku, con difficoltà desiderata, viene generata una volta e al volo
- Il livello di difficoltà è oggettivo.
Come funziona?
Prima di tutto, il semplice fatto che il più difficile è il puzzle, più tempo ha bisogno di essere risolto.
Ma il tempo da risolvere è intimamente correlata sia numero di indizi (Givens) e alternative medi da investigare per cella vuota.
estendere il mio previous answer, è stato detto che per qualsiasi puzzle Sudoku il numero minimo di indizi è una proprietà oggettiva del puzzle (ad esempio for 9x9 grids the minimum number of clues for having a valid sudoku is 17)
Si può cominciare da lì e calcolare il numero minimo di indizi per difficoltà livello (correlazione lineare).
Inoltre in ogni fase del processo di generazione sudoku, si possono verificare le alternative medi (da investigare) per cella vuota è entro certi limiti (in funzione della difficoltà desiderata)
seconda che l'algoritmo usa backtrack o no (per il caso d'uso discusso l'algoritmo non fa retromarcia) la difficoltà desiderata può essere raggiunta sia con probabilità = 1 o con alta probabilità entro limiti (rispettivamente).
I test del sudokus generati con questo algoritmo e il livello di difficoltà basato sui precedenti approcci (risolutore umano) mostrano una correlazione tra i tassi di difficoltà desiderati e stimati, oltre a una maggiore capacità di generalizzazione di configurazioni arbitrarie di sudoku.
(hanno usato questo in linea sudoku solver (e anche this one) correlare i tassi difficoltà del sudoku di prova)
Il codice è disponibile gratuitamente on github sudoku.js (along with sample demo application), una versione in scala ridotta di un costruttore CrossWord.js cruciverba professionale in JavaScript, dallo stesso autore
No, non ho mai trovato nulla del genere. Parte della cosa è che la "difficoltà" è molto relativa. – Mat
Non credo sia possibile. L'unica tecnica che conosco è quella di fare come dici tu: generare, classificare, buttare fuori se il range di difficoltà esterno. Inoltre, come ha detto Mat, la difficoltà è difficile da misurare in quanto diversi algoritmi risolvono diversi modi. – Ryan
Lo capisco, ma "generare, valutare, buttare, generare velocità, buttare, generare, mantenere" l'idea sembra selvaggiamente inefficiente. Inoltre, guardando tutti i giochi che hanno la possibilità di creare un puzzle di sudoku tramite difficoltà (es. Facile, med, difficile) sembra farlo in una frazione di secondo, non sembra molto probabile che lo stiano facendo . Soprattutto quelli sui dispositivi, come iPhone o Android. – ZachLHelms