Risolvere una variante di Sudoku con un elemento sconosciuto

2

Recentemente mi sono imbattuto in una variante speciale del Sudoku e ora sto lottando per risolverlo efficacemente in modo programmatico.

Considera la seguente griglia iniziale 6x6:

Leregole

Ilpuntointerrogativorossodovrebberappresentarelanostracifrasegreta.Lacifrasegretasicomportacomeunanormalecifra.Valeadire,haunvalorerealetra1e6,maquestovalorenonvienerivelatoalgiocatore.Inquestotipodigioco,secreiamounacollisione,lanuovacifrainseritadiventeràunelementoneutrochepuòesserevistocomeunjoker,nonincollisioneconnessun'altracifra.Adesempio,selacifrasegretafosseeffettivamenteuna6eabbiamoinseritoun6nellasuariga,essadiventerebbeunelementoneutro(econciòsapremmoanchequalèlacifrasegreta).Possiamogenerareunmassimodiunelementoneutro(nelsensochepossiamocrearesolounacollisione),unasecondacollisionerenderebbeirrisoltalagriglia.
Notaamargine:Naturalmente,questotipodigiocointerattivononlofahasensoesserestampatosuunpezzodicarta;sarebbeades.richiedeun'infrastrutturaclient-serverperilsegretodanonrivelarealgiocatore.

Analisi

Poichélacifrasegretasegueleregoledibase,possiamodedurrechenonpuòessereun4nellagrigliadiesempio,maognialtracifrapotrebbeesserepossibile.Possiamoanchevederechenonesisteunasoluzioneunica;infatti,disolitocisonocentinaiadipossibilisoluzioni.Inunagrigliainiziale6x6,c'èsempreunacifrasegretae6cifrechesonoposizionateinmodocasualenellagriglia(senzascontrarsil'unaconl'altra).Ciòsignificacheilsegretopotrebbeessereespostofindasubito,maelimineremoilcasobanaledalmomentochenonèaffattodivertente:)

Risoluzionedellastrategia

Lastrategiapiùpromettentesarebbequelladiscoprirelacifrasegretailpiùrapidamentepossibile.Cioè,inseriremmocifrenellasuariga,colonnaoscatolafinchénonsiesaurirebbeognipossibilità,ocreeremmounacollisione.Nonappenasappiamoqualèilsegreto,possiamorisolverel'enigmacomeunnormale(ignorandosemplicementel'elementoneutrosepresente).

Ilproblema

Voglioscrivereunalgoritmochetrovilacifrasegretasenzacreareunaschedairrisolvibile.
Hoscrittounprogrammapiuttostosmussatocheiniziaidentificandoicampinellariga,colonnaeriquadrodelsegretoconilminornumerodibloccanti.Quindiinseriscecifreinqueicampi,inunordinedalnumerominoredibloccantiallamaggiorpartedeibloccantifinoaquandoilsegretopuòesserededottodallacollisioneodall'esaurimento.Nellagrigliadiesempio,farebbequalcosadelgenere:


Le cifre blu verranno posizionate in ordine crescente (iniziando con 1 ). Il mio attuale alogritmo produce un consiglio irrisolvibile circa il 20% delle volte, il che è inaccettabile per me. Ed è per questo che sto facendo la domanda:
Quale sarebbe un approccio più intelligente, riducendo al minimo o addirittura eliminando la possibilità di creare un puzzle irrisolvibile?

P.S.: Apprezzo ogni tipo di risposta; la prosa teoretica, lo pseudo-codice o il codice reale in un linguaggio popolare va bene, voglio semplicemente ottenere l'essenza di quali campi / cifre selezionare per la strategia di partenza.

    
posta MCL 28.12.2014 - 16:36
fonte

1 risposta

1

Non penso di aver capito bene il concetto di WildCard. Forse alcune immagini di configurazioni di esempio alla lavagna potrebbero aiutare?

Esistono già degli algoritmi di risoluzione dei sudoku ben consolidati. Alcuni come

Backtracking.

Continua a posizionare i numeri uno a uno finché non raggiungi una posizione irrisolvibile, quindi ripercorri l'ultimo passaggio e continua.

Risoluzione dei vincoli

Ogni cella ha molti vincoli a causa della riga, della colonna e del gruppo di celle. Mappare tutti i vincoli di ogni cella e iniziare a risolvere la cella in cui la risposta è unica per tale contraint. Mantieni gli altri punti di contatto man mano che vengono aggiunti i numeri.

Puoi trovare più qui

Poiché esistono algoritmi ben consolidati, una strategia per affrontare questo problema è modificare le strategie sopra riportate per includerle. Ad esempio: questa cella non imporrà alcun vincolo nelle sue righe, colonne e nella cella più grande.

Cercherò di modificare con pseudo codice per una soluzione basata su vincoli se avrò tempo.

    
risposta data 28.12.2014 - 18:07
fonte

Leggi altre domande sui tag