Zarábaj až 6 000 € mesačne! Akreditované rekvalifikačné kurzy od 0 €. Viac informácií.

Diskusia – Sudoku v javascript

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Avatar
Michal Žůrek - misaz:28.12.2017 22:25

Dobrý! Hoď to do Cordovy a můžeš publikovat třeba na Play.

 
Odpovedať
28.12.2017 22:25
Avatar
Michal Žůrek - misaz:28.12.2017 22:52

Dokonce ani kód není vůbec špatný. Občas tam jsou nějaké divočiny, jako třeba

for (let i = 0; i < 9; i++) {
    for (let j = 0; j < 9; j++) {

        if(i<3 || i>5){
            if(j<3 || j>5){

Pomohli by tomu objekty, např. třídy kdyby na to přišlo klidně z ES6 a občas by se dal použít nějaký cykl. Například

newSudokuEasy.addEventListener("click", function () {
    loadPlayState(difficulty.easy, false);
    closeModal(modalNewSudoku);
});
newSudokuMedium.addEventListener("click", function () {
    loadPlayState(difficulty.medium, false);
    closeModal(modalNewSudoku);
});
newSudokuHard.addEventListener("click", function () {
    loadPlayState(difficulty.hard, false);
    closeModal(modalNewSudoku);
});

lze v JavaScript napsat taky takto:

[newSudokuEasy, newSudokuMedium, newSudokuHard].forEach(function (item) {
        item.addEventListener("click", function (diff) {
                loadPlayState(difficulty[diff], false);
                closeModal(modalNewSudoku);
        }.bind(null, item.id.split("newSudoku-")[1]));
});

pravdou je že je to trochu méně přehledná a chtělo by to komentář, ale zase je tam ten calllback jen jednou. Takže kdybys ho někdy měnil, měníš jen na jednom místě, ne na třech. Obvykle je to dobré udělat cyklem i když třeba na první pohled nevypadá úplně hezky. Takových míst se dá v kódu objevit víc.

 
Odpovedať
28.12.2017 22:52
Avatar
Michal Žůrek - misaz:28.12.2017 22:56

btw. Jaký máš názor na tu knihovnu jsPdf? Když jsem se před několika lety snažil vygenerovat PDF z JS tak knihovny byli jedna velká tragédie. Jedna vedle druhé. Už si ani nepamatuji jakou jsem nakonec použil. Zlepšilo se to nějak? Musel ji řešit nějaké záludné problémy, nebo to fungovalo "na první dobrou"?

Editované 28.12.2017 22:57
 
Odpovedať
28.12.2017 22:56
Avatar
David Hartinger
Vlastník
Avatar
David Hartinger:28.12.2017 23:18

Až teď jsem si všiml toho skvělého loga sovy :P

Odpovedať
28.12.2017 23:18
New kid back on the block with a R.I.P
Avatar
Peter Sciranka
Tvůrce
Avatar
Odpovedá na Michal Žůrek - misaz
Peter Sciranka:31.12.2017 10:29

Ahoj, ospravedlňujem sa že reagujem až teraz (som na chate). Ďakujem ti za komentár a rady, budem sa ich držať :)
Co sa tyka toho pdf, tak to bola moja prvá voľba, na fórach som na túto knižnicu našiel celkom pozitívne reakcie. Ja som to vyriešil tak, že sudoku je najskôr vytvorené na canvas a následne je tento obrázok napasovany do pdf. Problém som s tým nemal žiadny (až ma to prekvapilo).
Ahoj a prajem všetko dobré do nového roku :)

Odpovedať
31.12.2017 10:29
Act as if it was Impossible to Fail
Avatar
neutr
Člen
Avatar
neutr:2.1.2018 18:39

Jak máš očetřenu obtížnost / řešitelnost? Rád se nechám poučit. Mám koncept něčeho hodně podobného. Nastavit obtížnost explicitně nejde - tedy jde ale bez záruiky že je úloha ještě jednoznačně řešitelná.

Já osobně postavím nejprve úplné řešení a pak diskriminuji (mažu) čísla tak abych to posadil na řešení jediného čísla. Ale neumím vyřešit abstrakci vyloučení 2-3 možností aby zůstala jediná správná možnost.

Nechat to ve stavu když to nepůjde jednoznačně řešit je šit. Jak otestuješ že to nemá víc správných řešení, nebo že to není řešitelné?

 
Odpovedať
2.1.2018 18:39
Avatar
Peter Sciranka
Tvůrce
Avatar
Odpovedá na neutr
Peter Sciranka:2.1.2018 19:06

Ahoj, ako som písal v popise v časti "možné vylepšenia", aplikácia nekontroluje, či má sudoku jediné možné riešenie. Je to nastavené tak, že sa náhodne vygeneruje plné (vyriešené) sudoku a následne sa náhodne odstránia čísla (easy: ostane 45 čísel, medium: ostane 35 čísel, hard: ostane 27 čísel; alebo nejak tak, teraz presne neviem, ale približne takto).

Pretože je to v Javascripte a všetky výpočty bežia len na strane klienta, tak som to nechcel zaťažovať tým, že budem kontrolovať "jedinečnosť riešenia" a čakať, kým sa vytvorí takéto sudoku.

Jeden spôsob ako to dosiahnuť je, že si pripravíš pár takýchto sudoku, ktoré už budeš mať skontrolované a následne im môžeš prehadzovať riadky, stĺpce, otáčať ich a tým pádom dokážeš z jedného sudoku urobiť na prvý (aj druhý a aj tretí) pohľad rôzne sudoku.

Ďalšia možnosť je, že užívateľovi sa na začiatku stiahne už predpripravené sudoku a následne na pozadí spustíš generovanie nového, ktoré sa stane predpripravené (prípadne budeš mať nejakú zásobu sudoku).

Prípadne toto všetko nastaviť na backende a následne len cez AJAX/API by sa užívateľovi sťahovali predpripravené sudoku.

Ale ako som napísal, ja som toto zatiaľ neimplementoval, jedná sa čisto o FrontEnd aplikáciu.

Odpovedať
2.1.2018 19:06
Act as if it was Impossible to Fail
Avatar
neutr
Člen
Avatar
neutr:2.1.2018 20:12

Víš ode mne je to docela zákeřené. Explicitně nic takového neuděláš. Nejspíš bys musel oslovit někoho z praktiků aby Ti dali ta nejobtížnější řešení. No a pak udělat jen substituci čísel. Dělám 40 let kombinatoriku a poradím si v mnoha věcech ale garantovat obtížnost s unikátním řešením na to nemám.

Dá se udělat i substituce posic čísel na stejné řešení u dělat "milionkrát?" jinak. Ale explicitně vygenerovat obtížnost s určitým a jediným řešením je nad úrovní extrémní inteligence.

Ta praktika in line (Front end) nemá šanci bez důkazu. Ve výsledku může být jen vágní úvaha "asi to lze řešit" - když ne tak tak sorry. Jako úvaha k přemýšlení komunity vývojářů je to dobré, ale nasadit to do soutěže??

Ti co řeší závodně? Sudoku je pošahaná parta, ale já si nedovolím predikovat obtížnost pro tuhle bandu.Šel bych se zeptat s velkou pokorou co a proč je obtížné - a ani tak bych si nedovolil tvrdit, že vytvořím pravidla obtížnosti.

Řeším různé věci od algoritmů Partition, kombinace, variace with repetition a třeba faktoriál (Variace bez opakování) v extrémním rozsahu. Sudoku jsou pro mne kombinace typu C(9;3) - celkem systémy z 84 trojic uspořádaných do obsahů všech dvojic (840 systémů) které se dají uspořádat do 15360 systémů všech trojic 7x4 matiace 3x3. Měl bych z toho vytvořit QR kód a právě "Sudoku" jednoznačně predikovatelné bych potřeboval jako explicitní systém. - Nemám neumím.

Když bys to uměl seknu hlubokou poklonu.

 
Odpovedať
2.1.2018 20:12
Avatar
Peter Sciranka
Tvůrce
Avatar
Odpovedá na neutr
Peter Sciranka:2.1.2018 20:50

Popravde, neviem, čo ti na to napísať. To čo píšeš tak máš pravdu, ale mojím zámerom nebolo vytvoriť algoritmus na generovanie sudoku s jediným možným riešením a garantovaným stupňom obtiažnosti a ani to nikde netvrdím. Práve naopak, myslím si, že je to v popise všetko uvedené, ako to funguje.

Aplikácia je tu uvedená vrátane celého zdrojového kódu, je poskytnutá zdarma, nič za to nechcem a jedná sa len o ukážku, ako sa dá vytvoriť web-app v čistom JavaScripte + HTML/CSS.
<br>

Jako úvaha k přemýšlení komunity vývojářů je to dobré, ale nasadit to do soutěže??

Neviem ako si to presne myslel, aplikáciu som do žiadnej súťaže nenasadil a ani som to nikdy nemal v pláne.

V tom generovaní jedinečnosti riešenia a garantovania obtiažnosti máš pravdu a som rád, že si to tu napísal :)

Odpovedať
2.1.2018 20:50
Act as if it was Impossible to Fail
Avatar
neutr
Člen
Avatar
Odpovedá na Peter Sciranka
neutr:3.1.2018 12:56

Mrzí mne že se Tě moje příspěvky dotkly. Takhle jsem to určitě nemyslel. Jistě si ale rozumíme. Vím že jsi udělal dobrou věc. Měl jsem asi lépe zvýraznit že to není kritika na Tvou adresu, ale spíš motivační dotaz který by zajímal mne.

Asi jsem měl brát zřetel jen vytvořený obsah. Mne by právě zajímalo komplexní řešení na úrovni která by byla vhodná pro vrcholové soutěže. Někdo takové Sudoku staví a umí jít na hranici možného. Existují soutěže a někdo to musí umět. Celkem si myslím, že to dělají intuitivně, ale pokud mají nějaké algoritmy tak je asi nebudou zveřejňovat.

Naopak otestovat existující zadání není zdaleka takový problém jako postavit obtížné ale řešitelné zadání. Teoreticky by to mělo být stejně obtížné ale není.

Zajímalo mne spíš to zda někdo bude reagovat na takovou výzvu a postrčí mne. Jak jsem už psal - potřeboval bych to pro QR kód - matice 92. Ono to funguje i bez této podstaty, ale moc bych docenil minimalistický zápis který by měl garantované unikátní řešení.

Myslím žes to vzal správně [V tom generovaní jedinečnosti riešenia a garantovania obtiažnosti máš pravdu a som rád, že si to tu napísal ] - díky.

 
Odpovedať
3.1.2018 12:56
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zatiaľ nikto nevložil komentár - buď prvý!