SUDOKU Ivo Doko Saša Buzov.

Slides:



Advertisements
Similar presentations
KAKO IZRADITI IGRU: Izrežite tabele, sličice, kartice, žetone. Ostavite 1mm bijelog ruba oko okvira. Nalijepite ih na karton u boji (hamer), jako lijepo.
Advertisements

1.6. Pohrana podataka.
Programi zasnovani na prozorima
Uvod u programiranje - matematika – VI predavanje
Petlje WHILE – WEND.
PONAVLJANJE CheckBox Koristi se za rešavanje zadataka gde je potrebno omogućiti uključivanje ili isključivanje jedne ili više opcija. Važna svojstva: –Checked.
Nadgradnja klasa i nasljeđivanje – 3
Programiranje - Blokovi naredbi i logički tipovi –
Struktura petlje.
CheckBox RadioButton RadioGroup
The Present Perfect Continuous Tense
Microsoft Office 2007 MS Office je programski paket koji sadrži više programa: MS Word – program za obradu teksta MS Excel – program za izradu tabela sa.
Podatkovni višemedijski prijenos i računalne mreže Speech Recognition
SEMINARSKI RAD MS WORD.
Petlje FOR - NEXT.
REPEAT…UNTIL Naredbe ciklusa.
PROGRAMSKE PETLJE Milenković Gabrijela.
Komponente izbora i kontejnerske komponente
KREIRANJE OBJEKATA.
Europski dan programiranja
Izrada web-stranica.
Reference ćelije i opsega
Elektrotehnički fakultet – Podgorica Operativni sistemi
14 UNUTRAŠNJE I ANONIMNE KLASE
Armin Teskeredzic Zagreb, Hrvatska,
Page Layout Podešavanje stranica.
Element form Milena Kostadinović.
MessageBox.
KORELACIJSKA I REGRESIJSKA ANALIZA
(カックロ ) Ivo Ivanišević Ena Melvan
Pojmovi digitalnog zapisa
PubMed Osnove pretraživanja Ana Utrobičić, prof.
PROGRAMSKI JEZIK PASCAL
Osnovni simboli jezika Pascal
FAKULTET KEMIJSKOG INŽENJERSTVA I TEHNOLOGIJE
Do While ... Loop struktura
Programiranje – Small Basic
Memorije Vrste memorija i osnovni pojmovi Ispisne memorije
Programiranje - Uvod - Kolegij: Programski jezik C++
Bacanje kocke pomoću micro:bit-a
Strukture podataka i algoritmi 5. VRIJEME IZVRŠAVANJA ALGORITMA
Nizovi.
Croatian Infrastructure Project Challenges: a panel discussion on Croatian infrastructure Preparation and Implementation of Infrastructure projects in.
SREĆA.
Analiza varijance prof. dr. sc. Nikola Šakić.
Autor: Marko Pletikosa Mentor: doc.dr.sc. Domagoj Jakobović
Naredbe u php-u.
SRETNA SEDMICA.
Programski jezik C++ - Vježbe - 5. dio
Programski jezik Python
Priprema prezentacije
Programiranje - Naredbe za kontrolu toka programa – 1. dio
Programski jezik C++ - Vježbe - 4. dio
Kratkotrajne veze žena i muškaraca
HODITI U SVJETLU Odreći se svjetovnosti ADAPT it! Teaching Approach
Izranjajuća Inteligencija
Programiranje - Naredbe za kontrolu toka programa – 3. dio
FTP servis 1. Pokreni Command Prompt i unesi naredbu ftp C:\>ftp
Discipleship in Action
LimeSurvey Uvjetni prikaz pitanja Internetska istraživanja
Pristupni rad KOMPARATIVNI POREZNI SUSTAVI
Podatkovni višemedijski prijenos i računalne mreže Speech Recognition
BILJEŽNICA MS WORD.
7. Baze podataka Postavke MS Accessa.
Ponavljanje Pisana provjera
Programiranje - Naredbe za kontrolu toka programa – 1. dio
INTERPOLACIJA PO DIJELOVIMA POLINOMIMA
Vježbenica 2: struktura grananja – 2.dio
Kako zaštititi privatnost na facebooku
Iracionalni brojevi
Presentation transcript:

SUDOKU Ivo Doko Saša Buzov

Sadržaj Povijest slagalice Sudoku Rješavanje slagalica Generiranje novih slagalica Zaključak Literatura U hr. jeziku je pravilno npr. operacijski sustav Linux, a ne Linux operacijski sustav; toga se doduše ne drže niti na TV-u Nema potrebe stalno pisati Sudoku

Povijest Sudoku-a Sudoku – “Suuji wa dokushin ni kagiru” => broj se smije pojaviti samo jednom (su – broj, doku – sam) 18. st. – Leonhard Euler – Pravilo “Latinskih kvadrata” – brojevi u matrici se pojavljuju samo jednom vodoravno i okomito 1979.g. – Howard Garns – Dell Magazine – “Number Place” – dodano ograničenje da nema ponavljanja brojeva niti u jednom od 9 blokova

vrsta slagalice čije je rješavanje temeljeno na logici, najčešće nekim metodama eliminacije sastoji se od 1 velikog kvadratnog polja podijeljeno na 81 manjih kvadrata cilj igre – ispuniti sva polja (kvadrate) brojevima od 1 do 9, s time da se 1 broj smije pojaviti samo jednom u svakom retku i stupcu i svakom bloku od 3x3 polja

najčešći oblik igre – 9x9 ostale verzije – 4x4, 5x5, 6x6, 7x7, 12x12, 16x16, 25x25 postoje i verzije sa simbolima, slovima, riječima (Wordoku), jig-saw i sl.

Primjeri slagalica:

korištenje igre Sudoku: zabava testiranje inteligencije steganografija (znanstvena disciplina koja se bavi skrivanjem informacija)

bool determinepossiblevalues() - Odredi moguće vrijednosti za sva polja u tablici, vrati false ako postoji mjesto bez ijedne moguće vrijednosti. inline bool checksingles(log& changes) - Provjeri postoji li mjesto u tablici koje ima samo jednu moguću vrijednost, ako postoji to mjesto popuni i vrati true, inače vrati false. inline bool checkrows(log& changes - Za svaki redak tablice provjeri postoji li vrijednost koja se može upisati na samo jedno mjesto, ako postoji upiše je i vrati true, inače vrati false. inline bool checkcolumns(log& changes) - Isto kao checkrows samo za stupce. inline bool checkblocks(log& changes) - Isto kao checkrows i checkcolumns samo za 3x3 blokove. log changes – log je klasa koju smo konstruirali kako bi u nju spremali sve promjene koje smo napravili za potrebe backtrackinga

do{ do{if(!determinepossiblevalues()) obrisi sve promjene i vrati 0; ako smo došli do rješenja povećaj za 1 broj ukupnih rješenja; } while checksingles( changes) ; if (!determinepossiblevalues()) obrisi sve promjene i vrati 0; ako smo došli do rješenja povećaj za 1 broj ukupnih rješenja; } while checkrows(changes); } while checkcolumns(changes); }while checkblocks(changes);

ako je zadano da pretražujemo nasumično, ispermutiraj listofvalues. bestposition = mjesto u tablici za koje postoji najmanje mogućih vrijednosti. broj rješenja = 0; kreiraj listu listofvalues i u nju upiši sve moguće vrijednosti za poziciju bestposition. ako je zadano da pretražujemo nasumično, ispermutiraj listofvalues. while(listofvalues nije prazna){ - int current = vrijednost s početka liste valuelist; - makni tu vrijednost iz liste. - na poziciju bestposition postavi vrijednost current. - broj nađenih rješenja += solve(file, depth+1);   - izbriši vrijednost koju smo postavili na bestposition. } poništi sve vrijednosti koje smo promijenili (tj izbriši sve brojeve koje smo upisivali, kako bi se backtracking mogao vratiti) vrati broj pronađenih rješenja; }; Predzadbja natuknica, prazno mjesto viška

Generiranje novih sudoku Upišemo kanonski korijen u tablicu: pronađemo jedno rješenje gornje slagalice:

- nasumično ispermutiraj retke (unutar blok redaka) ­- nasumično ispermutiraj stupce (unutar blok stupaca) - nasumično ispermutiraj blok retke ­- nasumično ispermutiraj blok stupce - nasumično ispermutiraj vrijednosti u tablici - na slučajan način generiraj vektor order[81], koji nam govori kojim redoslijedom ćemo uklanjati vrijednosti iz tablice   for(i=0; i<81; i++){ -obriši vrijednost s pozicije order [i]; -provjeri je li rješenje jedinstveno, ako nije, vrati vrijednost na poziciju order [i]; } s pozicije, a ne sa

lijevo je permutiranje stupaca, a desno permutiranje blok-redaka

Zaključak: program generira sudoku u prosjeku za 0.046s puno brže nego brute force

Literatura 1. http://web. math. hr/nastava/ui/ 2. http://en.wikipedia.org/wiki/Algorithmics_of_sudoku 3. http://en.wikipedia.org/wiki/Sudoku 4. http://sudokugarden.de/ Veličina fonta u 1.

Najteži sudoku na svijetu...