Számvarázs,avagy SUDOKU-játékprogram

Bevezető.

Kilencszer kilenc,olyan mint egy számvarázs..az alapötlet rendkívül egyszerű:



Adott egy kilencszer kilences négyzetrács, háromszor hármas kisebb négyzetekre osztva, a feladat pedig az, hogy minden sorba és oszlopba, illetve a kisebb négyzetekbe írjuk be egytől kilencig a számokat úgy, hogy minden sorban, minden oszlopban és minden háromszor hármas kisebb négyzetben egy-egy számjegy csak egyszer szerepeljen. (Az, hogy számokat használunk, teljesen érdektelen, lehetnének betűk vagy kis ábrák is, a lényeg, hogy minden sorban, oszlopban és kis négyzetben minden elemből csak egy lehet. Ennek ellenére a 'számos' változat terjedt el leginkább.)

Néhány számot természetesen előre beírnak a feladvány kitalálói, de a rejtvény nehézsége elsősorban nem a megadott számok mennyiségétol függ: könnyen megfejthető lehet egy olyan sudoku, amibe kevés szám van beírva előre, és fordítva. Minden feladvány megfejthető következtetéssel, találgatás nélkül.

A sheffieldi egyetem matematikusa, Frazer Jarvis és Bertram Felgenhauer egyébként kikombinálta, pontosabban szoftverekkel, nyers erővel kiszámolta, hogy a kilencszer kilences rácsban 6 670 903 752 021 072 936 960-féleképpen lehet a szabályoknak megfelelően elhelyezni a számokat.



Egyedülálló  - 1-9 - számok



A sudoku egyszerűbb elődjét a 18. század végén alkotta meg Leonhard Euler svájci matematikus, mai formáját először 1979-ben publikálták Number Place (számelhelyezés) néven New Yorkban. Japánban 1984-ben adták ki először, de csak 1986-ban lett hirtelen népszerű. A mostani világméretű közkedveltség annak köszönhető, hogy az új-zélandi Wayne Gould, aki korábban bíró volt Hongkongban, 1997-ben Japánban találkozott egy ilyen rejtvénnyel, és nekiállt kifejleszteni egy szoftvert, amely képes gyorsan előállítani a rejtvényeket. Amikor kész volt, jelentkezett a brit Times-nál, ahol tavaly november 12-én meg is jelent az első sudoku, ami rövid időn belül sikertörténetté vált.

A sudoku szó "egyedülálló számok"-at jelent japánul, a kifejezés egy japán kiadó birtokában van, emiatt az ország többi kiadója inkább eredeti nevén, nanpure-ként jelenteti meg a fejtörőket (ez a kifejezés "számelhelyezést" jelent).

Magyarországon azonban nem teljesen ismeretlen a sudoku, ugyanis a Fülesben már valamivel több, mint tíz éve vannak ilyen rejtvények, a bájos „Bűvös négyzet” címmel.


A Sudoku egy japán játék, amely napjainkban Japántól Ausztráliáig szerte a világon százezrek kedvenc időtöltésévé vált. Több száz lap közöl naponta Sudoku-rejtvényeket, köztük az olyan tekintélyesek is, mint a The Times vagy a Die Zeit,Magyarországon a Metro.



De mi ez egyáltalán? S hogyan kell játszani?



A Sudoku ugyanis egy olyan egy 9x9-es négyzetrács, amelyben 9 darab 3x3-as, egyenként 9 darab négyzetet tartalmazó kisebb négyzet van. Összesen tehát 81 darab négyzetből áll. A négyzetrácsban számok vannak megadva és a négyzetrács üres négyzeteibe úgy kell beírnunk a hiányzó számokat, hogy a négyzetrács mind a 9 sorában és mind a 9 oszlopában megtalálható legyen 1-től 9-ig minden egyes szám. De mindezt úgy, hogy ezeknek a feltételeknek a teljesülése mellett még az is igaz legyen, hogy valamennyi (9 darab) kis négyzetben (blokkban) is szerepeljen az összes szám 1-től 9-ig. Ez a rejtvény-megoldás azonban csak akkor érdemli ki a Sudoku elnevezést, ha a nagy négyzetrácsba az előre megadott számok olyan módon vannak megadva, hogy a rejtvénynek csak egyetlenegy megoldása van.



Ugye egész egyszerűnek tűnik?



Megérteni könnyű - megoldani már nehezebb. Szerencsére nem kell matematikusnak lennünk ahhoz, hogy egy ilyen jellegű rejtvényt meg tudjunk fejteni: csak logikus és rendszeres gondolkodásra van hozzá szükségünk. Ám ha úgy érezzük, ez nekünk mégsem megy, akkor sem szabad feladnunk, hiszen a Sudoku épp ezeket - a mindennapi életben és az életbenmaradáshoz oly fontos - képességeket segíthet kifejleszteni. A Sudoku kiváló agytorna: játék a lehetőségekkel, kísérletezés, stratégia.



S mitől függ egy-egy Sudoku nehézsége?


A rejtvények nehézségi szintje attól függ, hogy logikailag mennyire nehéz meghatározni a további számokat. Talán meglepő, de annak, hogy kezdetben hány szám adott a rejtvényben, alig van köze ahhoz, hogy a rejtvény valójában mennyire nehéz. Vannak rejtvények, amelyekben csak kevés számjegy adott, ezek lehetnek akár a legegyszerűbbek is - ugyanakkor lehetséges, hogy azokat a rejtvényeket, amelyekben az átlagnál több szám adott, rendkívül nehéz megfejteni. Ám hogy valójában melyik minősül nehéznek vagy könnyűnek, eléggé szubjektív: nem vagyunk egyformák, másképpen dolgozik az agyunk is.


Mikor játsszunk Sudokut?


Egy Sudoku megfejtése bármikor kellemes időtöltés lehet: egy hosszú vagy rövid vonatúton, napfényes vagy esős délután, hóban vagy szélben, egyedül vagy nagyobb társaságban. Lehet magányosan gyakorolni, társaságban versenyezni,agyat tornáztatni vele.




A mai korban azonban van még egy segítség,ez a számítógép.




Hát akkor lássunk csodát,hogyan segíthet egy számítógépes program,mely a legegyszerűbb módon,egy  BASIC program felhasználásával segít elménknek, a fenti módon összerakni a számokat,függőlegesen,vízszintesen és a 3x3-as kockában elrendezni a számokat 1-től 9-ig.












Számvarázs,avagy  SUDOKU-játékprogram,fő részei,a programozás megoldandó lépései:

0-ás sor
Számok és DIM tömbök kiszámítása,beállítása
Alapértékek beállítása
9x9-es tábla megrajzolása
Az első lépés:a tábla,és memória törlése (csak először,kezdetben (!!))
Főmenű elkészítése
Első menű
Második menű
Kész tábla betöltése (egyszerre a memóriában 5 tábla lehet,ez kb.20K-t foglal a memóriából,a többit maga a program) (Hej-haj a mai gépek sok megabájtja !!)
Tábla mentése (nemcsak emulátoron,hanem az alapgépen is működik)mentés:magnóra,mentés microdrive-re,mentés +3-as géphez floppyra ( a mentésekre szükség van,nem biztos,hogy egyszerre meg tudjuk a feladatot oldani)
Játék indítás-harmadik menű
Spectrum tábla-kitöltés segítsége,mutatja a lehetőségeket,vízszintes sorokat,függőleges oszlopokat,és a 3x3-as tömböket.
Javítások a megkezdett tábláknál
A táblán való mozgás a spectrum legendás írányítási módja :QAOP  SPACE,vagyis Q=fel,A=le,O=balra,P=jobbra,0-vagy SPACE tűz(beírás) gomb (az emulátort beállíthatjuk a kurzorgomb irányításra)
A befejezéskor a játékgyáros elköszön








   0 REM Számvarázs -SUDOKU-program Játekgyáros 2006 március


a kedvenc,a BASIC-ban nem is létező 0-ás sor (!!),ezt beírva,az többet nem törölhető,ide szokták a címet,és a szerző nevét beírni,létrehozása az alanti kódsorral lehetséges:
(először a 0-ás sorba írandó szöveget az 1-es számsorral látjuk el,feltesszük a helyére,majd sorszám nélkül),a képernyő aljára írjuk be:

POKE PEEK 23635+256*PEEK 23636+1,0

majd ENTER-rel elküldjük,és máris látjuk,hogy az 1-es (sor) és sorszám eltűnt,és 0-ra változott.

   1 DEF FN f(x)=(1 AND (x=1 OR x=3 OR x=5 OR x=7))
   2 DEF FN c(x)=(1 AND (x=2 OR x=3 OR x=6 OR x=7))
   3 DEF FN b(x)=(1 AND (x>=4 AND x<=7))

Kezdetnek definiáljuk a számokat,ezekre majd a programban hívatkozunk

  10 BORDER 0: PAPER 4: INK 0

a keretet feketére,az alapszínt zöldre,a tinta (betű) színt feketére állítjuk

  20 DIM s(9,9,10)
  30 DIM s$(5,9,9,10,1)
  32 DIM r(5)

dimenzionáljuk a változók tömbjeit,itt raktározzuk el számokat munka közben,és a program végeztével
(Itt jegyzem meg,hogy a programot soha ne indítsuk RUN-nal,mert akkor a DIM tömböket lenullázzuk,és minden elvész !!)

  35 LET elrendez=1
  37 LET n$="tábla1"
  40 LET alaptabla=0

Meghatározzuk a fő változó értékeket,ezek értéke-nagysága kezdetben=0

  50 BORDER 1: PAPER 1: INK 6: CLS

A főcímhez átállítjuk a táblaszín értékeket :keret fekete,alapszín-háttér kék,rajzoló-író szín sárga.



  51 FOR f=72 TO 79: POKE 23681,f: LPRINT " S z á m v a r á z s - j á t é k ": RANDOMIZE USR 65055: NEXT f
  52 PRINT INK 5;AT 3,2; PAPER 1;"* NyitraiSOFT-Játékgyáros";AT 20,5;"avagy SUDOKU tábla"
  54 PAUSE 0




a képernyőre középre - sárga színben kb.tízszeres nagyságban kiírja : Számvarázs - játék,a felirat hangjelzés közepette,lüktetve kirajzolódik,felül normál betűkkel' NyitraiSoft-Játékgyáros',alulra 'avagy SUDOKU tábla',majd egy gombnyomásig várakozik..

  55 GO SUB 9000: GO SUB 9070: GO SUB 9150

a 9000-es sor írja ki a címet,a  9070-es sor rajzoja ki a táblát,a 9150-s sor visszaküldi ide (részletesebben majd ott)



  60 LET m$="  Irattár  Beír   Mutat   Vége  ": LET o$="ibmv": GO SUB 8500
  70 IF valaszt=0 THEN GO TO 60

az első főmenű

  80 GO TO 100+30*(valaszt-1)
 110 LET m$="  Új   Betölt   Mentés  Opciók    ": LET o$="ubmo": GO SUB 8500
 115 IF valaszt=0 THEN GO TO 55




A második főmenű (ezeket használjuk majd legtöbbet)

 120 GO TO 200+50*(valaszt-1)


 130 REM Menű szerkesztő
 140 IF alaptabla=0 THEN BEEP .1,-20: GO TO 60
 150 GO SUB 9200: GO SUB 7000: GO TO 60

itt eszközölhetjük a javításokat,ha valamit rosszul írtunk be

 170 IF alaptabla=0 THEN BEEP .1,-20: GO TO 55
 180 GO TO 1000




a számvarázs-játék indul

 192 GO TO 9999




itt az utolsó sora a programnak,ha mindent elmentettünk,és már a mai napon nem akarunk a kitöltendő táblával foglalkozni,kiléphetünk a programból..



 210 GO SUB 9500: GO SUB 9150: LET alaptabla=1: GO TO 100
 260 INPUT "Neve [";(n$);"] "; LINE z$

az első táblát betölthetjük (magnónál szalagról,emulátornál a megfelelő könyvtárból)




 265 IF z$="új" THEN GO TO 100
 270 IF LEN z$>10 THEN GO TO 260
 280 IF LEN z$>0 THEN LET n$=z$
 283 PRINT AT 20,0;
 285 IF elrendez=1 THEN LOAD n$ DATA s(): LET alaptabla=1: GO SUB 9000: GO SUB 9070: GO SUB 9150: GO TO 100
 290 IF elrendez=2 THEN LOAD *"m";1;n$ DATA s(): LET alaptabla=1: GO SUB 9000: GO SUB 9070: GO SUB 9150: GO TO 100
 295 IF elrendez=3 THEN LOAD *"a:"+n$ DATA s(): LET alaptabla=1: GO SUB 9000: GO SUB 9070: GO SUB 9150: GO TO 100
 297 GO TO 100


Kimenthetjük más hordozóra is ..

 310 INPUT "Neve [";(n$);"] "; LINE z$
 320 IF LEN z$>10 THEN GO TO 310
 330 IF LEN z$>0 THEN LET n$=z$
 335 IF elrendez=1 THEN SAVE n$ DATA s(): GO TO 100
 340 IF elrendez=2 THEN SAVE *"m";1;n$ DATA s(): GO TO 100
 345 IF elrendez=3 THEN SAVE *"a:"+n$ DATA s(): GO TO 100
 347 GO TO 100
 360 LET m$="  Magnókazettára mentés         ": LET o$="m": GO SUB 8500
 370 IF valaszt=0 THEN GO TO 100

ha a tábla a képernyőn van,akkor hozzáláthatunk a feladatnak (persze,ha nem akarjuk,nem kell a számítógép segítségét igénybevenni,nekiláthatunk a képernyőn saját magunk próbálkozása által is kitölteni,megoldani a feladatot.)


 380 LET elrendez=valaszt: GO TO 100
1000 REM számvarázs-játék indul
1010 INPUT ""
1020 PRINT #0; BRIGHT 1; INK 0; PAPER 6;AT 0,0;""
1030 LET cf=1: LET cc=1: LET menu=0
1050 GO SUB 6900
1070 GO SUB 8800


Játék indítás-harmadik menű

1080 INPUT "": IF menu=0 THEN PRINT #0; BRIGHT 1; INK 6; PAPER 0;AT 0,0;"QAOP/villog léptet    1-9 Szám"'"SPACE töröl  ENTER vissza Másik.": GO TO 1100
1090 IF menu=1 THEN PRINT #0; BRIGHT 1; INK 6; PAPER 0;AT 0,0;"Sor Oszlop   Tömb   Elhatároz"'" Load(tábla) Kiment(tábla) Másik. ": GO TO 1100
1100 REM első kör
1120 LET sor=3: LET oszlop=30: BRIGHT 1: FOR k=1 TO 9: PRINT AT sor+k-1,oszlop;CHR$ ((32 AND s(cf,cc,k)=0)+(48+k AND s(cf,cc,k)<>0)): NEXT k: BRIGHT 0
1130 LET cfp=3+(cf-1)*2: LET ccp=7+(cc-1)*2
1140 PRINT AT cfp,ccp; OVER 1; INK 8; FLASH 1;" ": BEEP .01,0
1150 PAUSE 0: LET t$=INKEY$
1160 IF t$="o" OR t$=CHR$ 8 THEN PRINT AT cfp,ccp; OVER 1; INK 8; FLASH 0;" ": LET cc=cc-1: IF cc<1 THEN LET cc=9
1170 IF t$="p" OR t$=CHR$ 9 THEN PRINT AT cfp,ccp; OVER 1; INK 8; FLASH 0;" ": LET cc=cc+1: IF cc>9 THEN LET cc=1
1180 IF t$="a" OR t$=CHR$ 10 THEN PRINT AT cfp,ccp; OVER 1; INK 8; FLASH 0;" ": LET cf=cf+1: IF cf>9 THEN LET cf=1
1190 IF t$="á" OR t$=CHR$ 11 THEN PRINT AT cfp,ccp; OVER 1; INK 8; FLASH 0;" ": LET cf=cf-1: IF cf<1 THEN LET cf=9
1200 IF t$<"1" OR t$>"9" THEN GO TO 1230
1210 LET ii=cf: LET jj=cc: GO SUB 8600: FOR i=1 TO LEN v$: IF t$=v$(i) THEN LET va=VAL t$: LET s(cf,cc,10)=va: FOR k=1 TO 9: LET s(cf,cc,k)=(1 AND k=va)+(0 AND k<>va): NEXT k: PRINT AT cfp,ccp; INK 1;va
1220 NEXT i
1230 IF t$=" " THEN LET s(cf,cc,10)=0: FOR k=1 TO 9: LET s(cf,cc,k)=1: NEXT k: LET i=cf: LET j=cc: GO SUB 7200: PRINT AT cfp,ccp;" "
1240 IF t$=CHR$ 13 THEN GO TO 50



a spectrum kérésre megmutatja:milyen számokat írhatunk be a megfelelő sorba,oszlopba,vagy 3x3 tömbbe

1250 IF t$="s" THEN PRINT AT cfp,ccp; OVER 1; INK 8; FLASH 0;" ": GO SUB 2000: GO TO 1080
1260 IF t$="o" THEN LET menu=NOT menu: GO TO 1080
1270 IF t$="t" THEN GO SUB 3000: GO TO 1080: REM aktuális sor
1280 IF t$="e" THEN GO SUB 4000: GO TO 1080: REM aktuális oszlop
1290 IF t$="l" THEN GO SUB 5000: GO TO 1080: REM aktuális 3x3-as blokk
1300 IF t$="k" THEN GO SUB 1500: GO TO 1070
1310 IF t$="m" THEN GO SUB 1600: GO TO 1070
1400 GO TO 1100

Lehetőség van új tábla kitöltésre,ezt kiválaszthatjuk egy feladványfüzetből,vagy magunk kreálhatunk új táblát..

1500 REM tábla kitöltés
1510 INPUT "": PRINT #0;AT 1,0;"   1-5 tábla mentés,ENTER kilépés ": BEEP .1,20
1520 PAUSE 0: LET t$=INKEY$: IF (t$<"1" OR t$>"5") AND t$<>CHR$ 13 THEN GO TO 1520
1525 IF t$=CHR$ 13 THEN RETURN
1530 LET res=VAL t$
1540 IF r(res)=0 THEN BEEP .1,-20: GO TO 1520
1550 INPUT "": PRINT #0;AT 1,0;"Betöltöm a: ";
1560 FOR i=1 TO 9: PRINT #0;" :";: FOR j=1 TO 9: FOR k=1 TO 10: LET va=CODE s$(res,i,j,k): LET s(i,j,k)=va-100: NEXT k: NEXT j: NEXT i
1565 GO SUB 9150
1570 RETURN
1600 REM

ha elkészültünk egy feladvány beírásával (ez még nem a kész táblát jelenti,hanem csak az induló számok beírását, mindig mentsük el),hogy később visszatérhessünk az induló álláshoz

       


1610 INPUT "": PRINT #0;AT 1,0;"1-5 tábla kimentés,ENTER kilépés ": BEEP .1,20
1620 PAUSE 0: LET t$=INKEY$: IF (t$<"1" OR t$>"5") AND t$<>CHR$ 13 THEN GO TO 1620
1625 IF t$=CHR$ 13 THEN RETURN
1630 LET res=VAL t$
1650 INPUT "": PRINT #0;AT 1,0;"Mentem a táblát ";
1660 FOR i=1 TO 9: PRINT #0;" :";: FOR j=1 TO 9: FOR k=1 TO 10: LET va=s(i,j,k): LET s$(res,i,j,k)=CHR$ (va+100): NEXT k: NEXT j: NEXT i
1670 LET r(res)=1
1680 RETURN

itt kezdődik a segítség (persze ne gondoljuk azt,hogy a spectrum egyszerűen kitölti nekünk a feladványt,csak megmutatja,kiírja a lehetőségeket,látványos formában)minden sorban,oszlopban,3x3-as tömbben megmutatja,mit is írhatunk be.

2000 REM Spectrum segíti kitölteni a SUDOKU-táblát
2010 LET mindig=0: LET elvon=1: LET torol=0
2023 INPUT "": PRINT #0;AT 1,0; INVERSE 1;"A meghatározó számok keresése   "
2025 LET va=0: LET va1=0: LET va2=0
2030 FOR i=1 TO 9: FOR j=1 TO 9: LET cfp=3+(i-1)*2: LET ccp=7+(j-1)*2: PRINT AT cfp,ccp; INVERSE 1; OVER 1;" ": IF s(i,j,10)>0 THEN GO TO 2100
2050 BRIGHT 1: FOR k=1 TO 9: PRINT AT 3+k-1,30;CHR$ ((32 AND s(i,j,k)=0)+(48+k AND s(i,j,k)<>0)): NEXT k: BRIGHT 0
2091 IF elvon THEN GO SUB 7200
2092 LET ii=i: LET jj=j: GO SUB 8600
2093 IF LEN v$<>1 THEN GO TO 2100
2094 LET va=VAL v$: LET s(i,j,10)=va: FOR k=1 TO 9: LET s(i,j,k)=(0 AND k<>va)+(1 AND k=va): NEXT k: GO SUB 7500: PRINT AT cfp,ccp; INK 1;va: GO TO 2110
2100 PRINT AT cfp,ccp; INVERSE 1; OVER 1;" "
2105 IF INKEY$=" " THEN LET torol=1: RETURN
2110 NEXT j: NEXT i
2120 LET elvon=0
2131 GO SUB 8900: IF hataroz THEN RETURN
2132 IF va=0 THEN GO SUB 7900: IF va=0 AND NOT torol THEN GO SUB 8300: IF va1=0 THEN RETURN
2133 IF torol THEN RETURN
2134 IF va1<>0 AND va=0 THEN GO TO 2020
2135 IF mindig=1 THEN LET t$="i": GO TO 2170





Ha végzett egy-egy résszel,felajánlja a szünetet,vagy a folytatást

2140 INPUT "": PRINT #0;AT 0,0;"A (f)olytatom elég hosszú lesz:"'"Csináljam? (Igen/Nem/Folytatom)"
2150 PAUSE 0: LET t$=INKEY$
2160 IF t$<>"i" AND t$<>"n" AND t$<>"f" THEN GO TO 2150
2165 IF t$="f" THEN LET mindig=1: GO TO 2135
2170 INPUT "": PRINT #0;"Már dolgozom is...": FOR f=3 TO 19 STEP 2: FOR c=7 TO 23 STEP 2: PRINT AT f,c; OVER 1;" ": NEXT c: NEXT f: IF t$="i" THEN GO TO 2020
2180 RETURN



kérhetünk egy-egy kiválasztott sort




3000 REM aktuális sor választása
3010 LET m$="Megmutatom az 1-9 lehetőségeit  ": LET o$="123456789m"
3015 GO SUB 8500
3020 IF valaszt=10 THEN GO TO 3100
3030 IF valaszt<>0 THEN GO TO 3040
3031 FOR j=1 TO 9: IF s(cf,j,10)<1 THEN PRINT AT cfp,7+(j-1)*2;" "
3032 NEXT j
3035 RETURN
3040 FOR j=1 TO 9: IF s(cf,j,10)<1 AND s(cf,j,valaszt)=1 THEN PRINT AT cfp,7+(j-1)*2; INK 3;valaszt: GO TO 3050
3045 IF s(cf,j,10)<1 THEN PRINT AT cfp,7+(j-1)*2;" "
3050 NEXT j
3060 GO TO 3015



megmutatja egy táblázatban,hogyan helyezkednek el a számok,sorban lekérhetjük az 1,2 9 stb. sort is



3100 REM aktuális sor részlete
3120 CLS : LET fi=cf
3125 GO SUB 9000: INK 2: PLOT 52,122: DRAW 144,0: PLOT 52,108: DRAW 144,0: PLOT 52,122: DRAW 0,-92: DRAW 144,0: PLOT 196,122: DRAW 0,-92
3127 FOR j=1 TO 10: PLOT 52+(j-1)*16,122: DRAW 0,-92: IF j=1 OR j=4 OR j=7 OR j=10 THEN DRAW 1,0: DRAW 0,92
3128 NEXT j: INK 0
3129 LET v$="Lehetséges": BRIGHT 1: LET sor=7: LET oszlop=5: GO SUB 8700: BRIGHT 0
3130 PRINT AT 4,13; INVERSE 1;"sor: ";fi
3140 FOR j=1 TO 9: PRINT AT 7,7+(j-1)*2;: IF s(fi,j,10)>=1 THEN PRINT s(fi,j,10): FOR k=1 TO 9: PRINT AT 8+k,7+(j-1)*2;" ": NEXT k: GO TO 3175
3150 PRINT " ": FOR k=1 TO 9: PRINT AT 8+k,7+(j-1)*2;: IF s(fi,j,k)=1 THEN PRINT k: GO TO 3170
3160 PRINT " "
3170 NEXT k
3175 NEXT j
3180 LET m$="      1-9 pontos részletezés    "
3190 LET o$="123456789"
3200 GO SUB 8500
3210 IF valaszt=0 THEN CLS : GO SUB 9000: GO SUB 9070: GO SUB 9150: GO SUB 6900: GO SUB 8800: GO TO 3000
3220 LET fi=valaszt: GO TO 3130
4000 REM aktuális oszlop választás
4010 LET m$="Megmutatom az 1-9 lehetőségeit  ": LET o$="123456789m"
4015 GO SUB 8500
4020 IF valaszt=10 THEN GO TO 4100
4030 IF valaszt<>0 THEN GO TO 4040
4031 FOR i=1 TO 9: IF s(i,cc,10)<1 THEN PRINT AT 3+(i-1)*2,ccp;" "
4032 NEXT i
4035 RETURN
4040 FOR i=1 TO 9: IF s(i,cc,10)<1 AND s(i,cc,valaszt)=1 THEN PRINT AT 3+(i-1)*2,ccp; INK 3;valaszt: GO TO 4050
4045 IF s(i,cc,10)<1 THEN PRINT AT 3+(i-1)*2,ccp;" "
4050 NEXT i
4060 GO TO 4015


megmutatja egy táblázatban,hogyan helyezkednek el a számok,sorban lekérhetjük az 1,2 9 stb. oszlopot is

4100 REM aktuális oszlop
4110 CLS : GO SUB 9000
4112 INK 2: FOR i=0 TO 9: PLOT 52,(3+(i-1)*2)*8+4: DRAW 160,0: IF i/3=INT (i/3) THEN PLOT 52,(3+(i-1)*2)*8+5: DRAW 160,0
4114 NEXT i
4116 PLOT 52,12: DRAW 0,18*8+1: PLOT 68,12: DRAW 0,18*8+1: PLOT 52+160,12: DRAW 0,18*8+1: INK 0
4118 LET v$="Lehetséges": LET sor=7: LET oszlop=29: BRIGHT 1: GO SUB 8700: BRIGHT 0
4120 LET co=cc
4200 FOR i=1 TO 9: PRINT AT 3+(i-1)*2,7;: IF s(i,co,10)>=1 THEN PRINT s(i,co,10): FOR k=1 TO 9: PRINT AT 3+(i-1)*2,9+(k-1)*2;" ": NEXT k: GO TO 4220
4205 PRINT " "
4210 FOR k=1 TO 9: PRINT AT 3+(i-1)*2,9+(k-1)*2;: IF s(i,co,k)=1 THEN PRINT k: GO TO 4215
4212 PRINT " "
4215 NEXT k
4220 NEXT i
4225 INVERSE 1: LET v$="oszlop "+STR$ (co): LET sor=6: LET oszlop=4: GO SUB 8700: INVERSE 0
4230 LET m$="     1-9 lehetseges oszlop "
4240 LET o$="123456789"
4250 GO SUB 8500
4260 IF valaszt=0 THEN CLS : GO SUB 9000: GO SUB 9070: GO SUB 9150: GO SUB 6900: GO SUB 8800: GO TO 4000
4270 LET co=valaszt: GO TO 4200
5000 REM

megmutatja egy táblázatban,hogyan helyezkednek el a 3x3 tömb számai,sorban lekérhetjük az 1,2 9 stb. kockát is

5010 LET m$="Megmutatom az 1-9 lehetőségeit  ": LET o$="123456789m"
5020 GO SUB 8500
5030 IF valaszt=10 THEN GO TO 5100
5040 IF valaszt<>0 THEN GO TO 5070
5050 LET ii=1+3*INT ((cf-1)/3): LET jj=1+3*INT ((cc-1)/3): FOR i=ii TO ii+2: FOR j=jj TO jj+2: IF s(i,j,10)<1 THEN PRINT AT 3+(i-1)*2,7+(j-1)*2;" "
5060 NEXT j: NEXT i: RETURN
5070 LET ii=1+3*INT ((cf-1)/3): LET jj=1+3*INT ((cc-1)/3): FOR i=ii TO ii+2: FOR j=jj TO jj+2: IF s(i,j,10)<1 AND s(i,j,valaszt)=1 THEN PRINT AT 3+(i-1)*2,7+(j-1)*2; INK 3;valaszt: GO TO 5080
5075 IF s(i,j,10)<1 THEN PRINT AT 3+(i-1)*2,7+(j-1)*2;" "
5080 NEXT j: NEXT i
5090 GO TO 5020
5100 REM hangjelzés és ENTER-re kilépés
5110 BEEP 1,-20: GO TO 5020
6900 REM lehetőségek kijelzése
6910 LET sor=3: LET oszlop=2: LET v$="tábla": INVERSE 1: GO SUB 8700
6920 LET sor=3: LET oszlop=29: LET v$="lehetőseg": GO SUB 8700: INVERSE 0
6930 RETURN

ha saját magunk írtunk be valamit,akkor a spectrum ellenőriz,és megmutatja a hibás elhelyezkedést





7000 REM a spectrum ellenőrzi és megmutatja a lehetséges számokat
7005 INPUT "": PRINT #0;AT 1,0; INVERSE 1;"Beállítom a lehetséges számokat!"
7010 FOR i=1 TO 9: FOR j=1 TO 9: LET cfp=3+(i-1)*2: LET ccp=7+(j-1)*2: PRINT AT cfp,ccp; INVERSE 1; OVER 1;" ": IF s(i,j,10)>0 THEN GO TO 7125
7040 GO SUB 7200
7125 PRINT AT cfp,ccp; INVERSE 1; OVER 1;" ": NEXT j: NEXT i
7140 RETURN


vízszintesen,majd függőlegesen is végignézi,és kijelöli a spectrum



7200 REM előszőr vízszintesen,majd függőlegesen is végignézi,és kijelöli
7220 FOR c=1 TO 9: IF c<>j AND s(i,c,10)>0 THEN LET s(i,j,s(i,c,10))=0
7240 NEXT c
7260 FOR f=1 TO 9: IF f<>i AND s(f,j,10)>0 THEN LET s(i,j,s(f,j,10))=0
7280 NEXT f
7290 LET fcom=1+3*INT ((i-1)/3): LET ccom=1+3*INT ((j-1)/3): FOR f=fcom TO fcom+2: FOR c=ccom TO ccom+2
7320 IF (f<>i OR c<>j) AND s(f,c,10)>0 THEN LET s(i,j,s(f,c,10))=0
7330 NEXT c: NEXT f
7340 RETURN
7500 REM a 3x3-as kockákban mutatja a lehetséges értékeket
7510 FOR c=1 TO 9: LET s(i,c,va)=(1 AND c=j)+(0 AND c<>j): NEXT c
7520 FOR f=1 TO 9: LET s(f,j,va)=(1 AND f=i)+(0 AND f<>i): NEXT f
7530 LET fcom=1+3*INT ((i-1)/3): LET ccom=1+3*INT ((j-1)/3): FOR f=fcom TO fcom+2: FOR c=ccom TO ccom+2: LET s(f,c,va)=(1 AND (f=i AND c=j))+(0 AND (f<>i OR c<>j)): NEXT c: NEXT f
7540 RETURN














Megoldások  elemzése ""nézd csak türelmesen...""",viszíntesen a sort,függőlegesen az oszlopokat,és külön-külön a 3x3 tömböket..







7900 REM elemzés minden lehetőséggel
7905 INPUT "": PRINT #0;AT 1,0; INVERSE 1;"Megoldás elemzése ""nézd csak türelmesen..."""
7907 LET va=0
7910 FOR i=1 TO 9: LET cfp=3+(i-1)*2: DIM v(9,2): FOR j=1 TO 9: LET ccp=7+(j-1)*2: PRINT AT cfp,ccp; OVER 1; INK 8; INVERSE 1;" ": IF s(i,j,10)>0 THEN GO TO 7925
7915 BRIGHT 1: FOR k=1 TO 9: PRINT AT 3+k-1,30;CHR$ ((32 AND s(i,j,k)=0)+(48+k AND s(i,j,k)<>0)): NEXT k: BRIGHT 0: FOR k=1 TO 9: LET v(k,1)=v(k,1)+s(i,j,k): IF v(k,1)=1 AND v(k,2)=0 THEN LET v(k,2)=j
7920 NEXT k
7925 PRINT AT cfp,ccp; OVER 1; INK 8; INVERSE 1;" ": IF INKEY$=" " THEN LET torol=1: RETURN
7927 NEXT j: FOR k=1 TO 9: IF v(k,1)=1 THEN LET s(i,v(k,2),10)=k: LET va=k: LET j=v(k,2): FOR l=1 TO 9: LET s(i,j,l)=(1 AND l=va)+(0 AND l<>va): NEXT l: GO SUB 7500: PRINT INK 1;AT cfp,7+(j-1)*2;va
7930 NEXT k: NEXT i
7935 IF va<>0 THEN RETURN
7950 FOR j=1 TO 9: LET ccp=7+(j-1)*2: DIM v(9,2): FOR i=1 TO 9: LET cfp=3+(i-1)*2: PRINT AT cfp,ccp; OVER 1; INK 8; INVERSE 1;" ": IF s(i,j,10)>0 THEN GO TO 7960
7955 BRIGHT 1: FOR k=1 TO 9: PRINT AT 3+k-1,30;CHR$ ((32 AND s(i,j,k)=0)+(48+k AND s(i,j,k)<>0)): NEXT k: BRIGHT 0: FOR k=1 TO 9: LET v(k,1)=v(k,1)+s(i,j,k): IF v(k,1)=1 AND v(k,2)=0 THEN LET v(k,2)=i
7957 NEXT k
7960 PRINT AT cfp,ccp; OVER 1; INK 8; INVERSE 1;" ": IF INKEY$=" " THEN LET torol=1: RETURN
7965 NEXT i: FOR k=1 TO 9: IF v(k,1)=1 THEN LET s(v(k,2),j,10)=k: LET va=k: LET i=v(k,2): FOR l=1 TO 9: LET s(i,j,l)=(1 AND l=va)+(0 AND l<>va): NEXT l: GO SUB 7500: PRINT INK 1;AT 3+(i-1)*2,ccp;va
7970 NEXT k: NEXT j
7980 IF va<>0 THEN RETURN
8000 FOR m=1 TO 9 STEP 3: FOR n=1 TO 9 STEP 3

a 3x3-as kockák ellenőrzése,itt szokott a legtöbb hiba lenni

8005 DIM v(9,3)
8010 FOR i=m TO m+2: LET cfp=3+(i-1)*2: FOR j=n TO n+2: LET ccp=7+(j-1)*2
8020 PRINT AT cfp,ccp; OVER 1; INK 8; INVERSE 1;" ": IF s(i,j,10)>0 THEN GO TO 8050
8030 BRIGHT 1: FOR k=1 TO 9: PRINT AT 3+k-1,30;CHR$ ((32 AND s(i,j,k)=0)+(48+k AND s(i,j,k)<>0)): NEXT k: BRIGHT 0: FOR k=1 TO 9: LET v(k,1)=v(k,1)+s(i,j,k): IF v(k,1)=1 AND v(k,2)=0 THEN LET v(k,2)=i: LET v(k,3)=j
8040 NEXT k
8050 PRINT AT cfp,ccp; OVER 1; INK 8; INVERSE 1;" ": IF INKEY$=" " THEN LET torol=1: RETURN
8055 NEXT j: NEXT i
8060 FOR k=1 TO 9: IF v(k,1)=1 THEN LET i=v(k,2): LET j=v(k,3): LET va=k: LET s(i,j,10)=va: FOR l=1 TO 9: LET s(i,j,l)=(1 AND l=va)+(0 AND l<>va): NEXT l: GO SUB 7500: PRINT INK 1;AT 3+(i-1)*2,7+(j-1)*2;va
8070 NEXT k
8080 NEXT n: NEXT m
8090 RETURN

a többi számhoz viszonyított lehetőség-megmutatom a megoldást:


8300 REM a többi számhoz viszonyított lehetőség
8305 INPUT "": PRINT #0;AT 1,0; INVERSE 1;"  Megmutatom a megoldást:      "
8307 LET va1=0: LET va2=0
8310 FOR i=1 TO 9: LET cfp=3+(i-1)*2: LET ii=i: FOR j=1 TO 9: LET ccp=7+(j-1)*2: PRINT AT cfp,ccp; OVER 1; INK 8; INVERSE 1;" ": IF s(i,j,10)>0 OR FN f(ABS s(i,j,10)) THEN GO TO 8350
8315 BRIGHT 1: FOR k=1 TO 9: PRINT AT 3+k-1,30;CHR$ ((32 AND s(i,j,k)=0)+(48+k AND s(i,j,k)<>0)): NEXT k: BRIGHT 0: LET jj=j: GO SUB 8600: IF LEN v$<>2 THEN GO TO 8350
8320 LET w$=v$: LET par1=j: LET enc=0: FOR c=1 TO 9: LET jj=c: IF jj<>j AND (s(ii,jj,10)<1 AND NOT FN f(ABS s(ii,jj,10))) THEN GO SUB 8600: IF w$=v$ THEN LET par2=c: LET enc=enc+1
8330 NEXT c: IF enc<>1 THEN GO TO 8350
8332 LET va1=VAL w$(1): LET va2=VAL w$(2): FOR c=1 TO 9: IF c<>par1 AND c<>par2 THEN LET s(i,c,va1)=0: LET s(i,c,va2)=0
8335 IF c=par1 OR c=par2 THEN LET s(i,c,10)=s(i,c,10)-1
8340 NEXT c
8350 PRINT AT cfp,ccp; OVER 1; INK 8; INVERSE 1;" ": IF INKEY$=" " THEN LET torol=1: RETURN
8355 NEXT j: NEXT i
8360 IF va1<>0 THEN RETURN
8370 FOR j=1 TO 9: LET ccp=7+(j-1)*2: LET jj=j: FOR i=1 TO 9: LET cfp=3+(i-1)*2: PRINT AT cfp,ccp; OVER 1; INK 8; INVERSE 1;" ": IF s(i,j,10)>0 OR FN c(ABS s(i,j,10)) THEN GO TO 8410
8375 BRIGHT 1: FOR k=1 TO 9: PRINT AT 3+k-1,30;CHR$ ((32 AND s(i,j,k)=0)+(48+k AND s(i,j,k)<>0)): NEXT k: BRIGHT 0: LET ii=i: GO SUB 8600: IF LEN v$<>2 THEN GO TO 8410
8380 LET w$=v$: LET par1=i: LET enc=0: FOR f=1 TO 9: LET ii=f: IF ii<>i AND (s(ii,jj,10)<1 AND NOT FN c(ABS s(ii,jj,10))) THEN GO SUB 8600: IF w$=v$ THEN LET par2=f: LET enc=enc+1
8390 NEXT f: IF enc<>1 THEN GO TO 8410
8392 LET va1=VAL w$(1): LET va2=VAL w$(2): FOR f=1 TO 9: IF f<>par1 AND f<>par2 THEN LET s(f,j,va1)=0: LET s(f,j,va2)=0
8395 IF f=par1 OR f=par2 THEN LET s(f,j,10)=s(f,j,10)-2
8400 NEXT f
8410 PRINT AT cfp,ccp; OVER 1; INK 8; INVERSE 1;" ": IF INKEY$=" " THEN LET torol=1: RETURN
8415 NEXT i: NEXT j
8420 IF va1<>0 THEN RETURN





3x3-as blokkok ellenőrzése,és javaslat


8422 REM kilences ( 3x3) blokk
8426 FOR m=1 TO 9 STEP 3: FOR n=1 TO 9 STEP 3
8428 FOR i=m TO m+2: LET cfp=3+(i-1)*2: LET ii=i: FOR j=n TO n+2: LET ccp=7+(j-1)*2: PRINT AT cfp,ccp; OVER 1; INK 8; INVERSE 1;" "
8430 IF s(i,j,10)>0 OR FN b(ABS s(i,j,10)) THEN GO TO 8452
8432 BRIGHT 1: FOR k=1 TO 9: PRINT AT 3+k-1,30;CHR$ ((32 AND s(i,j,k)=0)+(48+k AND s(i,j,k)<>0)): NEXT k: BRIGHT 0
8434 LET jj=j: GO SUB 8600: IF LEN v$<>2 THEN GO TO 8452
8436 LET w$=v$: LET par1i=i: LET par1j=j: LET enc=0
8438 FOR f=m TO m+2: FOR c=n TO n+2: IF f<>par1i AND c<>par1j AND (s(f,c,10)<1 AND NOT FN c(ABS s(f,c,10))) THEN LET ii=f: LET jj=c: GO SUB 8600: IF w$=v$ THEN LET par2i=f: LET par2j=c: LET enc=enc+1
8440 NEXT c: NEXT f
8442 IF enc<>1 THEN GO TO 8452
8444 LET va1=VAL w$(1): LET va2=VAL w$(2): FOR f=m TO m+2: FOR c=n TO n+2
8446 IF (f<>par1i OR c<>par1j) AND (f<>par2i OR c<>par2j) THEN LET s(f,c,va1)=0: LET s(f,c,va2)=0
8448 IF (f=par1i AND c=par1j) OR (f=par2i AND c=par2j) THEN LET s(f,c,10)=s(f,c,10)-4
8450 NEXT c: NEXT f
8452 PRINT AT cfp,ccp; OVER 1; INK 8; INVERSE 1;" ": IF INKEY$=" " THEN LET torol=1: RETURN
8453 NEXT j: NEXT i
8454 NEXT n: NEXT m: RETURN

a választott menűből való visszalépés,mindig az előző menűt tölti be


8500 REM  választott menű
8510 PRINT #0; BRIGHT 1; INK 0; PAPER 6;AT 0,0;m$;AT 1,0; BRIGHT 0; INVERSE 1;"ENTER-re az előző menűt tölti be"
8520 PAUSE 0: LET t$=INKEY$
8530 FOR t=1 TO LEN o$: IF t$=o$(t) THEN LET valaszt=t: RETURN
8540 NEXT t
8550 IF t$=CHR$ 13 THEN LET valaszt=0: RETURN
8560 GO TO 8520





a hibakeresés után megmutaja a spectrum a lehetséges szám-értékeket


8600 REM lista a lehetséges értékekkel v$(ii,jj)
8610 LET v$="": FOR k=1 TO 9: IF s(ii,jj,k)=1 THEN LET v$=v$+STR$ k
8620 NEXT k
8630 RETURN
8700 REM vízszintes kiírás
8710 FOR k=1 TO LEN v$: PRINT AT sor+k-1,oszlop;v$(k): NEXT k
8720 RETURN
8800 REM a tábla számai 1-5
8810 FOR i=1 TO 5: PRINT AT 2+i,3; PAPER 6+r(i); BRIGHT 1;i: NEXT i
8820 RETURN
8900 REM  meghatározza 1-9-et
8910 LET hataroz=0: FOR i=1 TO 9: FOR j=1 TO 9: IF s(i,j,10)<1 THEN RETURN
8920 NEXT j: NEXT i: LET hataroz=1: RETURN



ezzel kezdődik a játék,az elejéről ide ugrik,kiírja a fő-feliratot 'Számvarázs-tábla 2006'













9000 REM Számvarázs ( SUDOKU ) felirat
9002 INPUT "": BORDER 4: PAPER 4: INK 1: CLS




a keret zöld,a háttér zöld,a tintaszín kék


9003 PRINT INK 1;AT 1,5;"Számvarázs-tábla 2006'": GO TO 9020
9005 PLOT 0,0: DRAW INK 1;255,0: DRAW INK 1;0,175: DRAW INK 1;-255,0: DRAW INK 1;0,-175
9006 LET xi=20: LET yi=170: INK 1
9007 PLOT xi+32,yi: DRAW -32,0: DRAW 0,-4: DRAW 32,0: DRAW 0,-4: DRAW -32,0
9008 LET xi=xi+36: PLOT xi,yi: DRAW 0,-8: DRAW 32,0: DRAW 0,8
9009 LET xi=xi+36: PLOT xi+32,yi: DRAW 0,-8: DRAW -32,0: DRAW 0,4: DRAW 32,0
9010 LET xi=xi+36: PLOT xi,yi: DRAW 32,0: DRAW 0,-8: DRAW -32,0: DRAW 0,8
9011 LET xi=xi+36: PLOT xi,yi: DRAW 0,-8: DRAW 0,4: DRAW 16,0: DRAW 4,4: DRAW 12,0: PLOT xi+16,yi-4: DRAW 4,-4: DRAW 12,0
9012 LET xi=xi+36: PLOT xi,yi: DRAW 0,-8: DRAW 32,0: DRAW 0,8
9020 INK 1
9030 RETURN





kirajzolja kék színnel a kockás táblát,a 3x3-as tömböknek erősebb a vonala,jól látható módon




9070 REM tábla kirajzolás
9075 INK 1
9080 FOR i=0 TO 9
9090 PLOT 52,(3+(i-1)*2)*8+4: DRAW 18*8,0
9095 IF i/3=INT (i/3) THEN PLOT 52,(3+(i-1)*2)*8+5: DRAW 18*8,0
9100 NEXT i
9110 FOR i=0 TO 9
9120 PLOT (7+i*2)*8-4,12: DRAW 0,18*8+1
9125 IF i/3=INT (i/3) THEN PLOT (7+i*2)*8-5,12: DRAW 0,18*8+1
9130 NEXT i
9135 INK 0
9140 RETURN
9160 IF alaptabla=0 THEN RETURN
9170 FOR i=1 TO 9
9180 FOR j=1 TO 9
9190 PRINT AT 3+(i-1)*2,7+(j-1)*2;
9193 IF s(i,j,10)>0 THEN PRINT s(i,j,10): GO TO 9197
9195 PRINT " "
9197 NEXT j
9198 NEXT i
9199 RETURN




az előzőleg beírt,vagy betöltött táblát tudjuk megváltoztatni,a fő-maradandó számok feketével,amit mi,vagy a spectrum később ír be -jól elkülönülő - kék színnel

9200 REM javítás a táblán
9210 LET cf=1: LET cc=1



a táblán való mozgás a spectrum legendás írányítási módja :QAOP  SPACE,vagyis Q=fel,A=le,O=balra,P=jobbra,0-vagy SPACE tűz(beírás) gomb (az emulátort beállíthatjuk a kurzorgomb irányításra)




9225 PRINT #0;AT 0,0; BRIGHT 1;"SPACE töröl.  ENTER visszalép."'"VILLOG/QAOP lépés.    1-9 jelöl."
9230 LET cfp=3+(cf-1)*2: LET ccp=7+(cc-1)*2
9235 PRINT AT cfp,ccp; OVER 1; FLASH 1;" "
9240 PAUSE 0: LET t$=INKEY$
9250 IF t$=CHR$ 8 OR t$="o" THEN PRINT AT cfp,ccp; OVER 1;" ": LET cc=cc-1: IF cc<1 THEN LET cc=9
9260 IF t$=CHR$ 9 OR t$="p" THEN PRINT AT cfp,ccp; OVER 1;" ": LET cc=cc+1: IF cc>9 THEN LET cc=1
9270 IF t$=CHR$ 10 OR t$="a" THEN PRINT AT cfp,ccp; OVER 1;" ": LET cf=cf+1: IF cf>9 THEN LET cf=1
9280 IF t$=CHR$ 11 OR t$="q" THEN PRINT AT cfp,ccp; OVER 1;" ": LET cf=cf-1: IF cf<1 THEN LET cf=9
9290 IF t$=" " THEN PRINT AT cfp,ccp;" ": LET s(cf,cc,10)=0: FOR i=1 TO 9: LET s(cf,cc,i)=1: NEXT i
9300 IF t$=CHR$ 13 THEN PRINT AT cfp,ccp; OVER 1;" ": RETURN
9310 IF t$>="1" AND t$<="9" THEN LET va=CODE t$-48: LET s(cf,cc,10)=va: PRINT AT cfp,ccp;va: FOR i=1 TO 9: LET s(cf,cc,i)=(1 AND i=va) OR (0 AND i<>va): NEXT i
9499 GO TO 9230









amikor kezdünk (és nem indultunk a RUN-nal),vagy új táblát akarunk betölteni,akkor használjuk-e menű-t




9500 REM táblatörlés-memóriatörlés
9505 INPUT "": PRINT #0;AT 1,0;"Letörlöm a táblát,nullázom a memóriát!!";AT 1,22;
9507 DIM s(9,9,10)
9510 FOR i=1 TO 9
9515 PRINT #0;": ";
9520 FOR j=1 TO 9
9540 FOR k=1 TO 9
9550 LET s(i,j,k)=1
9560 NEXT k
9570 NEXT j
9580 NEXT i
9590 RETURN





és akkor elérkeztünk a program utosó soraihoz,itt kiléphetünk a játékból a játékgyáros köszönetével..
'búcsúzik a játékgyáros !' felirat a spectrum minden színében,és hangjelzés kíséretében,és utána a borzasztó FEKETE képernyő...






9998 REM kilépés a játékból
9999 FOR i=1 TO 15: BORDER 7: PAPER 7: INK 0: BRIGHT 0: FLASH 0: PRINT #0; INK i/2;AT 1,0;"    búcsúzik a játékgyáros !!   ": RANDOMIZE USR 65055: NEXT i: RANDOMIZE USR 0


Közreadta :Nyitrai László,akit játékgyárosnak is hívnak...
honlapom http://jatekgyaros.blogspot.com



Függelék:

Gould könyvei :Egyedülálló számok



A sudoku egyszerűbb elődjét a 18. század végén alkotta meg Leonhard Euler svájci matematikus, mai formáját először 1979-ben publikálták Number Place (számelhelyezés) néven New Yorkban. Japánban 1984-ben adták ki először, de csak 1986-ban lett hirtelen népszerű. 1989-ben Commodore 64-re is megjelent egy sudoku program DigitHunt címmel. A mostani világméretű közkedveltség annak köszönhető, hogy az új-zélandi Wayne Gould, aki korábban bíró volt Hongkongban, 1997-ben Japánban találkozott egy ilyen rejtvénnyel, és nekiállt kifejleszteni egy szoftvert, ami képes gyorsan előállítani a rejtvényeket. Amikor kész volt, jelentkezett a brit Times-nál, ahol tavaly november 12-én meg is jelent az első sudoku, ami rövid időn belül sikertörténetté vált, ésatöbbi.
A sudoku szó "egyedülálló számok"-at jelent japánul, a kifejezés a Nikoli kiadó birtokában van, legalábbis a rejtvénnyel kimerítően foglalkozó Wikipedia-szócikk szerint, emiatt az ország többi kiadója inkább eredeti nevén, nanpureként jelenteti meg a fejtörőt (ez a kifejezés "számelhelyezést" jelent).





Megjegyzések