Pystynkö mitenkään / helposti luomaan seuraavanvaisen taulukon satunnaisesti, niin, että sama numero ei esiinny kahta kertaa samalla rivillä
oikein
$ratkaisu = array( array(7,4,6,8,5,3,1,9,2), array(2,3,8,1,9,6,7,4,5), array(5,9,1,4,2,7,6,3,8), array(8,1,4,6,3,9,2,5,7), array(3,6,7,2,8,5,4,1,9), array(9,5,2,7,4,1,8,6,3), array(6,2,9,3,7,4,5,8,1), array(1,8,5,9,6,2,3,7,4), array(4,7,3,5,1,8,9,2,6) );
väärin
$ratkaisu = array( array(7,4,6,8,5,3,6,9,2), array(2,3,8,1,9,6,7,4,5), array(5,9,1,4,2,7,6,3,8), array(8,1,4,6,3,9,2,5,7), array(3,6,7,2,8,5,4,1,9), array(9,5,2,7,4,1,8,6,3), array(7,2,9,3,7,6,1,8,1), array(1,8,5,9,6,2,3,7,4), array(4,7,3,5,1,8,9,2,6) );
Mod. korjasi kooditagit!
Onnistuu vaikka näin olettaen, että tarkoitat rivillä vaakariviä:
vaaka sekä pysty
Kun aiheen otsikkona on sudoku, niin yhdeksän 3x3-neliötäkään eivät varmaan saa sisältää duplikaatteja.
Yksi tapa on antaa sudoku-ratkaisijalle osittain täytetty ruudukko. Jos ratkaisija ei toimi deterministisesti, sille voi antaa myös tyhjän ruudukon. Toinen vaihtoehto voisi olla lähteä täytetystä ruudukosta ja tehdä siihen satunnaisia muutoksia, jotka säilyttävä invariantin, mutta en tiedä miten helppoa tämä olisi.
jlaire kirjoitti:
Kun aiheen otsikkona on sudoku, niin yhdeksän 3x3-neliötäkään eivät varmaan saa sisältää duplikaatteja.
Yksi tapa on antaa sudoku-ratkaisijalle osittain täytetty ruudukko. Jos ratkaisija ei toimi deterministisesti, sille voi antaa myös tyhjän ruudukon. Toinen vaihtoehto voisi olla lähteä täytetystä ruudukosta ja tehdä siihen satunnaisia muutoksia, jotka säilyttävä invariantin, mutta en tiedä miten helppoa tämä olisi.
Jooh. Itsekkin varmaan toteuttaisin niin että antaisin osittain täytetyn(helpompi tarkistaa tuon oikeellisuus käsittääkseni) ja sitten tarkistaisin täytetyn läpi(suhteellisen helppoa). Näin ohjelman ei tarvitse itse luoda täysin oikeata josta osa piilotettaisiin mikä tuntuu ainakin itselleni hankalammalta.
Tuolla osittain täytetyllä logiikalla olenkin tehnyt toimivan version, mutta kiinnostaisi juuri sellainen logiikka millä pelipöytä arvotaan satunnaisesti.
Mutta saako oikeaa Sudoku-pöytää arpoa satunnaisesti? Tai lähinnä pitäisikö silloin valmiit numerot asetella sen mukaisesti, ettei peliin voi tulla vahingossakaan useampaa kuin yksi oikea vastaus. Eikös se yksi ainoa oikein vastaus ole vähän niin kuin Sudokun idea?
Vähän kun Googlea käyttää, niin tuolta löytyi yksi (PHP koodi) ratkaisu arvontaan: http://www.mattlefevre.com/viewExample.php?tut=PHP&proj=Sudoku Generator
Hankalampaa lienee tehdä tuosta sellainen valinta numeroita näkyviin (automaattisesti), että sudoku olisi ratkaistavissa, mutta kuitenkin riittävän haastava ja että ratkaisuja olisi vain yksi.
Täällä on generaattori, joka generoi sudokuja ratkaistavaksi.
Aihe on jo aika vanha, joten et voi enää vastata siihen.