A történet:
A kiegészítő szabályt egy nyugdíjas amerikai építész, Howard Garns találta ki, 1979-ben. Egy New York-i rejtvény újságban közölt néhány rejtvényt "Number Place" néven. (Abban az évtizedben, mint Rubik a kockát, és szintén építész!)
1984-ben a "Nikoli" nevű japán rejtvény társaság átvette a rejtvényt, és a "sudoku" elnevezést adta neki. Japánban azóta töretlen a népszerűsége. Több folyóirat csak ezzel foglalkozik, és azt állítják, hogy ők még mindig kézzel csinálják a rejtvényeket.
2004 végén az új-zélandi származású, hong-kongi Wayne Gould ajánlotta a számítógéppel készített rejtvényeit néhány neves angol újságnak, akik "kipróbálták", és európai siker lett belőle, sőt Amerikába is visszatért a játék.
Howard Garns nem érte meg a nagy sikert, egyik forrás szerint 1981-ben, másik szerint 1989-ben meghalt.
A matematika:
Bertram Felgenhauer és Frazer Jarvis sheffieldi matematikusok programmal kiszámították, hogy 6670903752021072936960 különböző helyes (9x9-es) sudoku kitöltés létezik. (>>)
Az alábbi - lényegesen különböző - transzformációkkal lehet jó sudoku kitöltésből másik jót csinálni:
Ha ezt figyelembe vesszük, akkor kiderül, hogy 5 472 730 538 lényegesen különböző kitöltés létezik. (>>) Ezzel még el lesz egy darabig az emberiség.
Ez azért meglepő csökkenés, de vegyük figyelembe, hogy "a kilenc számjegy permutációja" egyetlen kitöltésből 362879 (9!-1) különböző másikat eredményez. És ezek mindegyikére végrehajthatók a fenti további műveletek!
Azt (még) nem tudjuk, hogy minimum hány négyzetnek kell kitöltve lenni egy rejtvényben. Gordon Royle ausztrál matematikus már 35396 olyan lényegesen különböző sudoku rejtvényt halmozott fel, amikben 17 mező van kitöltve (a szám növekszik, a 2006. január 4-én érvényeset írtam ide). (>>) Olyan rejtvényt még senki nem talált, amiben 17-nél kevesebb mező van kitöltve.
Rejtvény készítés:
# készítek egy rejtvényt a következő módon:
üres táblát hozok létre
rejtveny_van_a_tablan="n"
lepes=0
while rejtveny_van_a_tablan="n" && lepes<20000
egy véletlenszerűen választott üres mezőre teszek egy véletlen számot az oda tehetők közül
ha a kapott sudoku nem megoldható, leveszem
ha megoldható és egyértelműen, akkor rejtveny_van_a_tablan="i"
# a "lepes"-t az utolsó két pont növeli (ld. alább)
# ha megoldható, de nem egyértelműen, akkor folytatni kell a ciklust
# a kapott rejtvényt (ha van) redukálom a következő módon:
if rejtveny_van_a_tablan="i"
szam_db=`a rejtvény kitöltött mezőinek a száma`
kiprobalva=0
egy_tomb-be beteszem az összes szám helyét, kipróbálandó-ként
while kiprobalva<szam_db
egy véletlenszerűen választott, nem próbált számjegyet elhagyok
ha a kapott sudoku nem rejtvény, visszateszem és kipróbáltnak adminisztrálom ("egy_tomb" és "kiprobalva" módosul)
ha a kapott sudoku rejtvény, újrainicializálom a mezőket (az "if" utáni 3 sort ismétlem)
A lépések száma (lepes) nem ciklusmenetenként eggyel nő, hanem attól függően is, hogy a megoldás keresése hány lépésből áll. (Próbálkoztam lépésszám korlátozás nélküli programmal is, elvileg az sem végtelen ciklus, gyakorlatilag többször is annak tűnt.)
A fenti redukálás nem feltétlen találja meg az összes redukáltat, hiszen ha az eredeti tábláról egy számjegy levehető, akkor a kapott táblával folytatja, az eredetihez nem tér vissza.
Az algoritmus alapján készült awk program egy gyors PC-n közel 30 óra alatt 674 rejtvényt generált. (3 kivételével nem tölthetők ki radírozás nélkül. Ez azt jelenti, hogy nincs minden lépésben egyértelműen kitölthető mező, ha nem gondolkozunk több lépéssel előre. Más szóval: csak három tölthető ki "visszalépés nélkül".) Ebben a tempóban 33497889728141811 év alatt lehetne az összes lehetséges sudoku kitöltéshez egy-egy rejtvényt keresni. Érthető, hogy miért nem szólt még senki a többieknek, hogy hagyják abba, mert ő mindet megtalálta.
Egy - scripttel generált - awk program egy óra alatt ötmillió helyes sudoku kitöltést generált. (Elegendően sok (csillagászati) idő alatt a script az összes sudoku-t előállítaná.)
Az első ötmillió kitöltés igen egyforma, mindegyik így kezdődik:

Ezt azzal tüntettem el, hogy a feljebb leírt transzformációkat alkalmaztam a rejtvényekre, véletlenszámokat használva közben.
Az előző script bash változata egy óra alatt csak százezer helyes sudokut állít elő.
Viszont lehetőség van arra, hogy a benne levő "for i.. in 1 2 3 4 5 6 7 8 9" parancsokban (legalább az első néhányban) a számjegyeket véletlenszerűen permutálva,
több kisebb "csoportot" generáljunk az összes létező sudoku közül.
Ezzel a módszerrel óránként kb. 250 rejtvényt tudtam előállítani. Összesen 5220-at generáltam. (143 kivételével ezek sem tölthetők ki radírozás nélkül.)
A módszerrel visszalépés (backtrack) nélküli sudoku megfejtőt készíthetünk úgy, hogy legenerálunk a rejtvény alapján egy hasonló, megoldáskereső scriptet, az alábbi módosításokal:
Önmagában is érdekes a 81-szeresen egymásba-skatulyázott, működő for ciklus.
A generált rejtvények letölthetők. Az első módszerrel készített 674 rejtvény a sudoku674 fájlban van, a megfejtések (ugyanebben a sorrendben) a megfejtes674 fájlban. A nem_radiros674 fájlban a rejtvények olyan bővítése van, ami radírozás nélkül megfejthető. Három hasonló fájl a második módszerrel generált 5220 rejtvényt tartalmazza.
Sokkal több a lehetséges rejtvény, mint a lehetséges kitöltés, hiszen pl. egy kitöltésből bármelyik számot elhagyva rejtvényt kapunk, továbbá a kitöltés összes különböző "jó, de nem kész" állapota is rejtvény. Az alábbiakban azt is látjuk majd, hogy egy rejtvénynek (és vele egy sudoku kitöltésnek) lehet több redukáltja is.
Az általam generált (redukált) rejtvényekben 20-29 kitöltött mező van, ennél több mező szokott lenni az emberi megfejtésre szánt - általában nem redukált - rejtvényekben. Nem csak a megfejtő kedvéért, hanem a (japánok által megkövetelt) szimmetria végett is tesznek a táblára redundáns számjegyeket.
Matematikailag korrektnek a redukált rejtvény tűnik, az előbb említett fórum a redukáltságot rejtvény szabálynak hiszi. Pedig nincs róla szó a szabály leírásokban, mivel a megfejtés szempontjából érdektelen, hogy redukált-e a rejtvény. Egy internetes lapon a géppel készített rejtvényeket vádolják azzal, hogy redundánsak, pedig az alábbi példák azt mutatják, hogy az embernek szántak azok, a "Nikoli" kézzel készített rejtvényei is. A példák a legtöbbet hivatkozott sudoku lapokról, a mai(2006.01.04) Metró újságból és a saját generálásból valók.
| www.sudoku.com | ||
|---|---|---|
| eredeti | egy redukált | megfejtve |
![]() | ![]() | ![]() |
| További redukáltak | ||
![]() | ![]() | ![]() |
| www.nikoli.co.jp/puzzles/1/index-e.htm | ||
|---|---|---|
| eredeti | egy redukált | megfejtve |
![]() | ![]() | ![]() |
| www.nikoli.co.jp/puzzles/1/hand_made_sudoku-e.htm | ||
| eredeti | egy redukált | megfejtve |
![]() | ![]() | ![]() |
| Metro újság, 2006.01.04. Az "eredeti"-ek radírozás nélkül kitölthetők. | ||
|---|---|---|
| eredeti | egy redukált | megfejtve |
![]() | ![]() | ![]() |
![]() | ![]() | ![]() |
| Saját készítésű, radírozás nélkül kitölthető | ||
|---|---|---|
| eredeti | kitöltés: sor/oszlop/szám | megfejtve |
![]() | 221 641 442 145 544 669 463 656 615 316 325 332 233 513 698 687 711 748 762 161 776 729 426 485 499 394 292 179 152 254 288 267 359 368 381 377 431 528 539 572 586 183 196 735 753 814 827 838 871 855 882 893 936 947 951 964 978 995 | ![]() |
4x4=2?
| sor | kitöltés | megjegyzés |
|---|---|---|
| 1 | ABCD | Az első sort 4!=24-féleképpen tölthetem ki, legyen ezek egyike az ABCD |
| 2 | CDAB CDBA DCAB DCBA | Mindegyik alá ennek a 4 második sornak az egyikét tehetem (ez 24x4=96 lehetőség eddig) |
| 3 | BA BC DA BA CA CD | Mindegyik alá az itt alatta levő három egyikét tehetem a 3. sor első két mezőjére (Ez összesen 3x96=288 lehetőség) |
Internetes fórumon hasonló, ennyire sem részletezett okoskodás bizonyítja a 288-at.
Másik fórumon azt látja be valaki, hogy csak két lényegesen különböző 4x4-es sudoku van. Ez tkp. csak matematikailag érdekes, mert egy rejtvényfejtő szempontjából a számok permutációja ugyanolyan, mint akármilyen egyéb csere-beréjük, ami alapján azt hiheti a végén az ember, hogy bármilyen méretű sudokunak egy független megoldása van, a többi ebből számok csereberéjével megkapható(!?).
4x4-es táblán igen egyszerű a minimumprobléma megoldása.
![]() |
Pl. ennek nincs megoldása, mert a 12 alá a 34-et kellene tenni valamilyen sorrendben, de a 3 már szerepel a sorban. |
Az eddigiek alapján a 4x4-es sudoku valóban "gyerekjáték", de azért nem annyira, hogy pl. a megoldásait az 1234 számjegyek összes 16-hosszúságú ismétléses variációjából keressük, mert ezek száma 416=4 294 967 296, nem másodpercek alatt előállítható.
Egyéb:
Rengetegen próbálnak pénzt csinálni abból, hogy rejtvényeket vagy ahhoz kapcsolódó programokat adnak el. Gordon Royle 17-esein kívül nem találtam nagyobb mennyiségű, ingyen letölthető sudokut.
A rejtvényeket nehézség szerint kategorizálják. Ez összefügg azzal is, hogy hány négyzet van előre kitöltve, de inkább azzal, hogy hány négyzetnek egyértelmű a kitöltése. Matematikailag pontos definíciókat is ki lehetne erre találni, amik nem biztos, hogy a kitöltők véleményével egyeznének.
Készítenek mindenféle egyéb méretű és beosztású sudoku rejtvényeket. Pl:
Két, forrásnyelven elérhető, rejtvény fejtő programot letöltöttem az internetről. Egyik perl-ben a másik PL-SQL-ben (Oracle) íródott. Egyszerű rejtvényt mindegyik gyorsabban fejtett meg, mint az általam awk-ban írt program, de Gordon Royle első "17-es"-én mindegyik elbukott. (A perl program azt állítja, hogy nem megoldható, a másik pedig gyorsan ad egy egészen hibás megoldást.)
A 9x9-es sudoku-hoz kapcsolódó számok sok esetben óriásiak.
Gordon Royle első "17-es"-éből levettem egy számot, és megkerestem a megoldásait. 265244 megoldása van!
(Ekkor lemondtam arról a tervről, hogy Royle 17-eseinek a redukáltjaként keressek 16-ost. Ha ilyen egyszerűen található lenne, ő már biztos talált volna.)
Az összes megoldás (81+1 jel hosszúságú sorban tárolva egyet) 509446587102234 GB lenne tömörítés nélkül!
Az összes lényegesen különböző megoldás viszont csak 418 GB.
Az a hit (Nikoli), hogy kézzel nagyobb szellemi élvezetet nyújtó rejtvények készíthetők, annyira sem megalapozott, mint évtizedekkel ezelőtt az a vélemény, hogy programok legfeljebb "mesterjelölt" szinten tudnak majd sakkozni. Redukált rejtvényt programmal is lehet úgy bővíteni, hogy
Végül néhány érdekes sudoku Gordon Royle gyüjteményéből (egyik sem tölthető ki radírozás nélkül).
(>>)
| eredeti | egy redukált | megfejtve |
|---|---|---|
![]() |
az első 17-es; nem redukálható |
![]() |
![]() |
17-es, 3 üres sorral; nem redukálható |
![]() |
![]() |
szimmetrikus 18-as; nem redukálható |
![]() |
![]() |
![]() |
![]() |
![]() |
négyzetmintás; nem redukálható |
![]() |
![]() |
X-lábú; nem redukálható |
![]() |
Végül egy magyar lap a témához: http://sudoku.lap.hu
| Csizmazia Albert | csa@inf.elte.hu |