ITnetwork summer 2020
80 % bodů zdarma na online výuku díky naší Letní akci!
Pouze tento týden sleva až 80 % na e-learning týkající se PHP

Sudoku v javascript

Vytvoril som Sudoku aplikáciám (hru), ktora sa skladá z troch základných častí (Play, Solve, PDF). Aplikáciám je prispôsobená na rôzne veľkosti a typy obrazoviek.

Hra (Play)

Cieľom je vyplniť Všetky prázdne polí podľa základných pravidlámi sudoku.

  • hráč si mozem Vygenerovať NOVÚ náhodne hru a zvoliť si ho obtiažnosť (easy, medium, hard).
  • aplikáciám využíva lokálne úložisko (local storage), do ktoreho sa ukladá hra, takže ai po zavriem prehliadača a následnom načítaní stránky, sa automaticky načíta Posledný stav.
  • generovaním hry je náhodné.

Riešenie (Solve)

Tento výukový obsah pomáhajú rozvíjať nasledujúce firmy, ktoré možno hľadajú práve teba!

Užívatelia Moze žiadať sudoku a následne si ho nech vyriešiť.

Poznámka: ak je zadané sudoku riešiteľné, Výsledok sa vypočítať rýchly. Ak sa zadá bez riesenie (as Minimoa vstupných čísiel), Moze to spôsobiť zahltenie a nereagovanie aplikácie.

Vytvoriť PDF

Užívatelia si mozem nechať vygenerovať pdf, zvoliť si obtiažnosť hľa počet strán, pričom na jednu stranu sa vygeneruje 6 rôznych hier.

Poznámka:

  • generovaním Moze chvíľu trvať, nájmy na Menej výkonných zariadeniach typu smartphone / tablet.
  • pre generovaním pdf som použil jsPDF.

Online verzia:

Aplikáciám je dostupná online: sudoku

Možné vylepšeniami

  • pri vytvárané sudoku, aplikáciám nekontroluje, či sa jedná o sudoku, ktore ma len jedno možné riesenie, ale ľan náhodne odstráni určitý počet čísel (závisí od obtiažnosti).

Budem vďačný za každý názor, pripomienky, kritiku, ....


Galéria


 

Stiahnuť

Stiahnuté 112x (333.03 kB)
Aplikácia je vrátane zdrojových kódov v jazyku JavaScript

 

Všetky články v sekcii
Javascript
Program pre vás napísal Peter Sciranka
Avatar
Ako sa ti páči článok?
Ešte nikto nehodnotil, buď prvý!
Autor sa venuje tvorbe webových aplikácii v Javascripte, tvorbe web stránok ale taktiež sa zaujíma o design, beckend a nové technológie.
Aktivity (1)

 

 

Komentáre

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 Čápka
Tým ITnetwork
Avatar
David Čápka:28.12.2017 23:18

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

Odpovedať
28.12.2017 23:18
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Peter Sciranka
Redaktor
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
Redaktor
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
Tento výukový obsah pomáhajú rozvíjať nasledujúce firmy, ktoré možno hľadajú práve teba!
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
Redaktor
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.

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
Avatar
Peter Sciranka
Redaktor
Avatar
Odpovedá na neutr
Peter Sciranka:3.1.2018 13:13

Musím popracovať na svojom vyjadrovaní :)

Myslím, že si rozumieme ako to kto myslel a mňa mrzí, že som to napísal tak, že sa ma to dotklo, len som chcel poukázať, že mojím cieľom bolo niečo iné ako to čo si sa pýtal, ale teraz to už je jasné :)

Ak by sa ti to podarilo nejak vyriešiť, tak mi prosím ťa napíš, budem veľmi rád :)

Odpovedať
3.1.2018 13:13
Act as if it was Impossible to Fail
Avatar
neutr
Člen
Avatar
Odpovedá na Peter Sciranka
neutr:3.1.2018 14:47

Ano děkuji. Určitě se na Tebe a tohle fórum obrátím. Mám k tomu dobrý důvod.
Osobně se angažuji na fóru OpenOffice.cz (nick stejný - neutr). Mojí velkou a ne příliš úspěšnou snahou je řešit potřeby státní správy a samosprávy. Má to více důvodů. To co nyní chystám je právě QR kód nového typu. Dnes bez čárového, nebo QR kódu úřady nefungují.

To co jsou dnes kvadratické obrázky QR se musí načítat přes OCR a jsou zbytečně "velké". Při tom mají docela malý obsah informací. Kombinatoricky čtená matice 92 má možnost zaznamenat mnohem více informací nežli 81 pozic dlouhý string.

Rozhodl jsem se pro JavaScript zejména proto, že kancelářské aplikace (Libre Office, Apache Open Office, ale asi i většina ostatních) lze skriptovat pomocí JavaScriptu. Matice používá samozřejmě všechny tisknutelné znaky. Takže takovou matici lze přepsat i klávesnicí když například klekne scaner a myslím že by standard mohl být v rámci velikosti fontu 6, nebo i méně. To souvisí s velikostí - řeknu okolo 4x4 cm, ale matice může být vytvořena jen důlčíkem v miniaturní podobě a také bude fungovat i když nevezme zdaleka tolik co matice alfanumerických znaků.

Osobně zastávám názor že vědomosti patří všem - zdarma, a jsem i protagonista hnutí Public money - public code PublicMoney-PublicCode. Nemyslím tím, že by IT specialisté měli pracovat zadarmo. Lidé si to často pletou OpenSource je zdarma a tak i programátor dělá za dobré slovo.

Například Vigenèrova šifra pro mne znamená tabulku 2562 generovanou z potenciálu 256! (faktoriál čísla 256), která se za běhu přešifruje a překonává tak Vernamovu šifru. Mimo toho už jsem zveřejnil typ šifry PNBT - žádný velký bratr už nebude moci nahlížet přes rameno.

Umím udělat zápis devítkových systémů pomocí 8-bitů - i když to není plnohodnotné tak objem umí také opravdu hodně. Mojí slabinou je skutečnost že jsem se naučil jen něco málo a nejvíc dělám ve StarBasicu. Samozřejmě si poradim se čtením Javy, nebo C a s JavaScriptem nemám žádný velký problém. Jsem ale stejně starý jako Rock&Roll a nemám moc chuti implementovat a zejména ladit aplikace - to dělám jen velmi nerad a ještě když neumím jazyk tak je to na mrtvici.

 
Odpovedať
3.1.2018 14:47
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ý!