Mozaik és egyéb rejtvények megoldása Mathematicával

Prog3

Barta Zsuzsanna (I8XOAF)

Tartalomjegyzék

1. Bevezetés

2. Játékok

2.1. Mozaik

2. 2. Grafilogika

2. 3. Amőba

2. 4. Sudoku

2. 5. Logik' Art

2. 6. SET!*

3. Feladványok

4. Megoldások

5. Összegzés

6. Segédletek

1. Bevezetés

Gyakran kérdezik tőlem, hogy hogyan bírjuk mi, egyetemisták a hosszú, sokszor akaratlanul is monotonná váló egyetemi előadásokat. Erre egyszerű a válasz : ha kezd elfajulni a helyzet, akkor vagy amőbázással, keresztrejtvényfejtéssel, sudokuzással, grafilogikázással, stb. próbáljuk eltölteni a hátralevő időt. A sudoku népszerűsége töretlen, de azoknak, akik kezdik megunni, ma már rengeteg hasonló logikai játékkal csillapíthatják az étvágyukat. Sőt - aminek én kifejezetten örülök - a grafilogika egyre népszerűbb és népszerűbb lesz.

Mint látható, ebben a dokumentumban ilyen és hasonló logikai játékokkal fogok foglalkozni, rámutatok a Mathematica sok érdekes (ilyen esetekben különösen hasznos) parancsára. Gondolok itt például a gombokra (Button parancs), amelyekből mátrixot készítünk, amiben az egyes cellákra kattingatva változik a mezők háttere; ezzel már kész is egy olyan program, amelynek a kimenete egy mátrix, és megoldhatjuk benne a feladványt. Használom továbbá a Graphics csomagot a Set!* játék (kicsit módosított) kártyáinak ábrázolására.

Viszonylag sok feladvány található a dokumentum végén, érdekeseket kerestem leginkább.

Próbáltam színesíteni a dokumentumot linkek és képek lehelyezésével. A feladványok megoldását például egy linkre kattintva tekinthetjük meg.

Dióhéjban körülbelül ennyit gondoltam elmondani, a lényeg úgyis a bevezetés után következik ...

2. Játékok

Ebben a részben különböző játékokkal fogok foglalkozni, bizonyosakra megpróbálok megoldó algoritmust írni, bizonyosakra pedig csak a feladványok tábláját legeneráló programot írok.
A legtöbb itt felmerülő játékhoz találhatunk feladványokat a havonta megjelenő Grafilogika című újságban illetve a következő linken:

Hyperlink["http://www.conceptispuzzles.com/index.htm"]

Ezen a linken hetente új feladványok jelennek meg, amit papíron vagy akár online is megoldhatunk.

2. 1. MOZAIK

Szabályok :

Az ábrában levő minden szám azt jelöli, hogy a kilenc négyzet (a számot tartalmazó négyzet, valamint a körülötte elhelyezkedő nyolc négyzet) közül hányat kell beszínezni.(A széleken álló számoknál - értelemszerűen - kilenc helyett hat, a sarkokban álló szám esetében pedig négy négyzetről van szó.) Egy adott négyzet esetén az adott négyzetet illetve a körülötte levő négyzeteket fogjuk az adott négyzet környezetének nevezni. Ha papíron oldjuk meg a feladványt, akkor érdemes az üresen maradó négyzeteket X - szel jelölni. Ha minden szám körül kiszíneztük illetve kiikszeltük a megfelelő négyzeteket, az ábrából egy kép tűnik elő. A feladványnak természetesen csak egy megoldása van.

Megoldási módszer:

Elkezdeni mindig így érdemes:

Ha nulla van egy adott négyzetben, akkor a környezetében levő összes négyzetet ki kell X - elni.

Ha kilences van az ábra belsejében, akkor mind a kilenc négyzetet ki kell színezni.

Ha hatos van az ábra szélén, akkor mind a hatot be kell színezni.

Ha négyes van az ábra sarkában, akkor a környezetében levő négyzeteket be kell színezni.

A folytatásnál először a következőket tegyük:

Ha egy adott négyzet környezetében már annyi négyzet ki van színezve, mint az adott szám az adott négyzetben, akkor a többi négyzetet ki lehet X- elni.

Ha egy adott négyzet környezetében már annyi négyzet ki van ikszelve, mint 9-c (c: adott szám az adott négyzetben), akkor a többi négyzetet ki lehet színezni a környezetben.

Ha a feladvány kezdő szintű, akkor ezzel a logikával meg kell kapnunk a képet. Ha viszont haladó szintű feladványt akarunk megoldani, akkor különböző logikai lépéseket kell még észrevennünk a megoldás megtalálásához, de ezek nagyon sokfélék lehetnek. 
Haladó szintű feladványoknál egyéb logikai lépésekre van szükség.

Kezdetleges megoldóprogram (csak kezdő szintű feladványokra):

A következő program a kezdő szintű Mozaik feladványokat oldja meg. Az einstein illetve csibe feladványok már haladó szintűek, ezekkel nem is tud megbirkózni.

ClearAll[i,j,k,m,n,list, kornyezet];

(*Megírjuk a kornyezet programot, ami ha megadjuk neki a tábla méreteit(n-et és m-et) valamint egy adott négyzet "indexeit" a mátrixban, akkor egy listát ír ki, amely listában szerepelnek a négyzet környezetében szereplő négyzetek "indexei".*)
kornyezet[{i_,j_},n_,m_]:=Select[Flatten[Table[{k,l},{k,i-1,i+1},{l,j-1,j+1}],1],(1≤#[[1]]≤n∧1≤#[[2]]≤m)&]

(*A program megírása itt kezdődik. A programnak egy inputmátrixot kell megadni, aminek az i. sorának j.eleme a 0-9-ig számok valamelyike, ha a feladvány táblájában az i. sor j. eleme is [0,9] intervallumbeli, egyébként pedig -1. Készítünk egy output mátrixot, amelynek méretei megegyeznek az inputmátrixéval, és minden elem -1. Ha megtudjuk, hogy a feladványban egy adott négyzet ki van színezve(illetve nincs kiszínezve), akkor az outputmátrixban az adott négyzethez tartozó elemet átírjuk 1-re (illetve 0-ra).*)
picapix[input_?MatrixQ]:=Module[{n,m,output,i,j,k,l,snulla,segy,z,h,seged},
         n=Dimensions[input][[1]]; 
         m=Dimensions[input][[2]]; 
         output=ConstantArray[-1,Dimensions[input]];

(*Ez a rész végigmegy a inputmátrixon, és ha valamelyik eleme 0, akkor outputmátrixban átírja az elem környezetéhez tartozó elemeket 0-ra. Ha valamelyik elem 9-es az inputmátrixban, akkor az outputmátrixban az adott elem környezetének megfelelő elemeket 1-esre írjuk át. Vizsgáljuk ebben a részben még a szélen álló hatosokat illetve a sarokban levő négyeseket is.*)
i=1;
While[i≤n, 
j=1;
While[j≤m, 
If[input[[i,j]]≠-1, {l={},l=kornyezet[{i,j}, n,m],If[input[[i,j]]==0, k=1;While[k≤Dimensions[l][[1]],  output[[l[[k,1]],l[[k,2]]]]=0; k++]],
If[Dimensions[kornyezet[{i,j},n,m]][[1]]==input[[i,j]], k=1;While[k≤Dimensions[kornyezet[{i,j},n,m]][[1]], output[[l[[k,1]],l[[k,2]]]]=1;k++]]}]
;
j++]
;
i++];

(*Egyszer végigmegy az inputmátrixon, és ha talál olyan elemet az inputmátrixban, ahol nem -1 van (legyen ez c) és amelynek a környezetében van -1, akkor megszámolja az adott elem környezetében levő kiikszelt négyeteket, beszínezett négyzeteket illetve -1-eket. Ha a beszínezett négyzetek száma megegyezik a c-vel, akkor az adott elem környezetében levő -1-eket átírjuk 0-ra az outputmátrixban. Ha a kiikszelt négyzetek száma megegyezik a 9-c-vel, akkor az outputmátrixban az adott elem környezetében levő -1-eket 1-esre írjuk át. Ha végigért a mátrixon, akkor újra lefut a ciklus, hacsak nem változott semmit az outputmátrix az előző lefutás óta(erre jó a seged). Erre azért van szükség, hogy kiküszöböljük azt, hogy sokáig fusson a ciklus. Tehát ha kilép a ciklusból, akkor kirajzoljuk a megoldást. (Narancssárga színűek lesznek azok a négyzetek, amikről nem tudta eldönteni a program, hogy kiszínezetttek-e vagy sem.)*)
For[h=1, h≤1000, h++,{seged=output,
For[i=1, i≤n, i++,
 For[j=1, j≤m, j++,
  If[input[[i,j]]≠-1 && input[[i,j]]≠9 && input[[i,j]]≠0,
{l={}, l=kornyezet[{i,j},n,m],snulla=0,segy=0,
 For[k=1,k≤Dimensions[l][[1]],k++, 
{If[output[[l[[k,1]],l[[k,2]]]]==0, snulla=snulla+1], 
If[output[[l[[k,1]],l[[k,2]]]]==1, segy=segy+1] } ], 
If[segy==input[[i,j]],  For[z=1,z≤Length[l],z++, If[output[[l[[z,1]],l[[z,2]]]]≠1, output[[l[[z,1]],l[[z,2]]]]=0] ]], 
If[snulla==Length[l]-input[[i,j]],  For[z=1,z≤Length[l],z++, If[output[[l[[z,1]],l[[z,2]]]]≠0, output[[l[[z,1]],l[[z,2]]]]=1] ]]
}]
 ]], If[output==seged, Break[]]}];
 (*Print[MatrixForm[output]];Print[h];*)
MatrixPlot[output, ColorRules->{0->White,1->Black,-1->Orange}, Background->Darker[Gray], Frame->False]]

Mozaik típusú feladványok betöltése

A betöltött feladványok közül az alábbi öt kezdő szintű, ezekre működik a program, viszont az einstein és a csibe feladványok haladó szintűek, ezeket nem tudja teljesen megoldani a program.

kezdofeladvanyok={abra,lo,vonat,varazslo,pincer};
Row[Map[picapix, kezdofeladvanyok]]

haladofeladvanyok={einstein,csibe};
Row[Map[picapix, haladofeladvanyok]]

Feladványgeneráló program (Mozaik)

Íme egy olyan program, amely egy inputmátrixhoz legenerálja a feladvány tábláját, amit meg is oldhatunk, hisz a tábla egyes mezőire kattintva a mezők színét egymástól függetlenül meg tudjuk változtatni.

ClearAll[list,j,i,k,szinek, gomb,mozaik,l];

mozaik[l_?ListQ]:=
Module[{k, list},

(*Ez a függvény a hívott egész számot modulo 3 nézi, és az így kapott számtól függően egy-egy színnek a kódját adja vissza. Ha 0, akkor az alapszínt kapjuk (kék), ha 1, akkor szürkét, ha 2, akkor fehéret. Ezt fogjuk használni arra, hogy az egyes mezőkre kattingatva változzon a mezők háttere.*)
szinek[k_]:=
Switch[
Mod[k, 3],
0,
list={0.7333333333333333`,0.9483939879453727`,1.`},
1,
list={0.37254901960784315`,0.39215686274509803`,0.3686274509803922`},
2,
list={1,1,1}];

(*Itt egy olyan gombot készítünk, melynek a felirata az inputmátrix megfelelő eleme lesz (ez a bemenet), és a háttere ciklikusan változik kék, szürke, fehér, kék, ..., stb.*)
gomb[i_]:=
DynamicModule[{j=0},
Button[If[i≠-1, i, " "],j++,
BaseStyle->{Bold,12},ImageSize->{22,21},FrameMargins->5,BaseStyle->15,Background->Dynamic[RGBColor[szinek[j][[1]], szinek[j][[2]],szinek[j][[3]]]]]];

(*Itt készítjük el a feladvány mátrixát, melynek elmei a fenti gombok.*)
Grid[Map[gomb[#]&, l, {2}],Frame->True, Spacings->{0.01,0.01}, Alignment->Center,FrameStyle->Thick]]

A feladvánnyal lehet játszani oly módon, hogy az ismert elemre kattinta megváltoztatjuk a cella színét.

mozaik[lo]

Megoldás

2. 2. GRAFILOGIKA

A megoldás menete

A megoldás menetét egy feladványon mutatjuk be.

1

Az első lépés az átfedések megkeresése. Ha egy bizonyos sor vagy oszlop elején csak egy szám áll, és ez a szám nagyobb, mint a hálózat szélességének fele, akkor átfedés keletkezik. Ezen a példán a két alsó sorban 9 iletve 12 négyzetből álló blokk van, amelyek hosszabbak, mint a hálózat szélességének fele.

2

Az átfedő négyzeteket tehát be lehet színezni, mivel ezek biztosan részei lesznek a képnek, függetlenül attól, hogy hol, melyik oldalon kezdődnek a blokkok. Átfedések akkor is keletkezhetnek, ha több szám van a sor (oszlop) elején. Hogy ezeket megtaláljuk, össze kell adni minden számot és üres helyet egy sorban (oszlopban), és ki kell számolni, hogy átfedés keletkezik - e, ha kihagyjuk a helyet az egyik számnak. Ha ezt a módszert folytatjuk, két újabb négyzetet lehet beszínezni alulról az ötödik sorban.

3

A következő lépés, hogy függőlegesen is megvizsgáljuk a rejtvényt, felhasználva a korábban beszínezett négyzeteket, mint kiegészítő információkat, és elkezdjük kiikszelni (a mi ábránkon a kiikszelt négyzetek fehérek) a nyilvánvalóan üresen maradó négyzeteket.
  A jobb oldali két utolsó oszlopot most már teljesen ki lehet ikszelni, mivel az egy - egy négyzetből álló blokkok már be vannak színezve.

4

A bal oldali legelső oszlopot azonban még nem lehet teljesen kiikszelni, mert ebben a pillanatban még nem tudható, hogy melyik szomszédos négyzetet kell beszínezni a két négyzetből álló blokkhoz. Balról az ötödik oszlopot most már be tudjuk fejezni, mivel itt csak egyféleképpen lehet egy 4 és egy 3 négyzetből álló blokkot kialakítani. 
  Vizsgáljuk meg ismét vízszintesen a hálózatot. Föntről a negyedik sort elemezve kiderül, hogy csak egy módon lehet a két 3 négyzetből álló blokkot beszínezni. Ugyanezt az elvet alkalmazzuk föntről az ötödik sorban is, és ez segít megoldani a hetedik sort is.
  Ezt folytatva hol vízszintesen, hol függőlegesen, megoldhatjuk az egész rejtvényt.

Feladványgeneráló program (Grafilogika)

Íme egy olyan program, amely megadva neki a sorokhoz illetve oszlopokhoz tartozó számokat egy - egy mátrixban, legenerálja a feladvány tábláját, amit meg is oldhatunk akár, hiszen az egyes mezőkre kattintva megváltoztathatjuk a mezők színét (hasonlóan működik, mint a Mozaik).

ClearAll[j,list,sor,i,oszlop,f,gomb3];

grafilogika[sor_?ListQ, oszlop_?ListQ]:=
Module[
{j,list,listt,f,lista, gomb3, alakitsor, alakitoszlop,keret},

(*Ez ugyanaz a program, mint a Mozaiknál a szinek.*)
f[j_]:=Switch[Mod[j, 3],0,lista={0.7333333333333333`,0.9483939879453727`,1.`},1,lista={0.17254901960784313`,0.1803921568627451`,0.17254901960784313`},2,lista={1,1,1}];

(*Ez a program nagyon hasonló a Mozaiknál szerepelt gomb programhoz, a különbség csupán annyi, hogy itt nincsenek a gombon feliratok.*)
gomb3:=DynamicModule[{jj=0},Button[" ",jj++,BaseStyle->{Bold,15},ImageSize->{26.3,28.06},FrameMargins->5,BaseStyle->15,Background->Dynamic[RGBColor[f[jj][[1]], f[jj][[2]], f[jj][[3]]]]]];

(*A sorokhoz tartozó számokat mátrixként kell megadni, de nekünk stringként van a számokra szükségünk. A táblázat szépsége érdekében szóközöket is szúrunk be.*)
alakitsor[listt_?ListQ]:=
Map[StringInsert[StringJoin[Riffle[#, " "]], " ", {-1,1}]&,Map[ToString, listt, {2}]];

(*Ez a program hasonlóan működik, mint az alakitsor, csak itt sortöréseket szúrunk be bizonyos helyekre.*)
alakitoszlop[list_?ListQ]:=
Map[StringInsert[StringJoin[Riffle[#, " \n", {2,-1,2}]], "\n", 1]&,Map[ToString, list, {2}]];

(*Ahhoz, hogy könnyen tudjuk kezelni az átfedéseket, minden ötödik sor és oszlop vastagabb lesz. Ennek megvalósításához készít ez a program a megfelelő indexekből egy listát.*)
keret={Map[#->True&,Range[2, Dimensions[oszlop][[1]]+2, 5]],
Map[#->True&,Range[2, Dimensions[sor][[1]]+2, 5]]};

(*Itt készül el a végleges mátrix, melynek első oszlopában az alakitsor van, első sorában az alakitoszlop, és a többi helyen pedig gombok.*)
list=Prepend[Map[PadRight[{#}, Dimensions[oszlop][[1]]+1, gomb3]&, alakitsor[sor]], Prepend[ alakitoszlop[oszlop], " "]];

(*Tekintjük a mátrixot táblázatalakban.*)
Grid[list,Dividers->keret,FrameStyle->Thick, ItemStyle->{12,Bold}, Spacings->{0.2,0.14}, Alignment->{{Right},{Bottom} }, Background->{{Lighter[Cyan,0.2]},{Darker[Cyan,0.3]}}]
]

Feladványok betöltése

grafilogika[halsor, haloszlop]

Megoldás

grafilogika[monalisasor,monalisaoszlop]

Megoldás

grafilogika[smilesor, smileoszlop]

Megoldás

grafilogika[charliesor, charlieoszlop]

Megoldás

grafilogika[hajósor, hajóoszlop]

2. 3. AMŐBA

Az áltanános amőba (japán nevén go - moku: öt kő) jatékban a felváltva rakó két játékos közül az győz, aki saját színéből (kör vagy X) legelőször egymás mellé helyez legalább ötöt függőlegesen, vízszintesen vagy átlósan. Kisebb tábla esetén kevesebbet kell elhelyezni.

Feladványgeneráló program (Amőba)

ClearAll[player, x,nn,mm];

(*A következő program egy olyan táblát generál, melyen lehet amőbázni. A tábla méreteit mi adjuk meg.*)
amőba[nn_?IntegerQ,mm_?IntegerQ ]:=
Module[
{},
Column[{Row[{Style["Player ",18,FontFamily->"Helvetica"],Toggler[Dynamic[player],{Style["X",18,FontFamily->"Helvetica"],Style["O",18,FontFamily->"Helvetica"]},Enabled->False]}],Grid[Table[Module[{x=" "},Dynamic[Toggler[Dynamic[x,(x=#;player=player/.{Style["X",18,FontFamily->"Helvetica"]->Style["O",18,FontFamily->"Helvetica"],Style["O",18,FontFamily->"Helvetica"]->Style["X",18,FontFamily->"Helvetica"]};)&],{" ",player},Enabled->(Dynamic[x==" "]),ImageSize->{25,25},Alignment->{Center,Center}]]],{nn},{mm}],Frame->All]}]
]

amőba[3,3]

amőba[5,5]

2. 4. SUDOKU

A szabály egyszerű: Úgy kell kitölteni a táblázatot, hogy minden sorban, minden oszlopban, illetve minden körbehatárolt területen pontosan egyszer szerepeljen az összes számjegy, a tábla nagyságától függetlenül.

Feladványgeneráló program (Sudoku)

Ez a proram azt az általános 9×9-es táblát generáljy le, amely 3×3-as négyzetekre van felosztva. Az ismert számok feketék lesznek a feladványon, az ismeretlen számokat tartalmazó cellákra kattintva pedig rendre 1-től 9-ig változtathatjuk a számokat.

sudoku[list_?ListQ]:=
Module[{i,j,sudokuseged},

sudokuseged=Map[If[#==0, FlipView[Map[Style[##, Darker[Green],30,Bold]&, {" ",1,2,3,4,5,6,7,8,9}],   ImageSize->{30,30}, Alignment->{Center, Center}], #]&,list, {2}];

Grid[sudokuseged,ItemSize->{2,3},ItemStyle->Directive[FontSize->30,Automatic,Bold],Dividers -> {{{Thickness[2],True,True}},{{Thickness[2],True,True}}},
   Background -> {Automatic,Automatic,
Flatten[Table[{i, j} -> If[EvenQ[Plus @@ Floor[{i - 1, j - 1}/3]], 
Lighter[Green, 0.75], White], {i, 9}, {j, 9}]]}] 
]

A feladványok betöltése

sudoku[sudoku1]

Megoldás

Stopper

A megoldási időt könnyen mérhetjük a következő program segítségével. A feladvány megoldásának megkezdésekor az Indítás gomra kattintunk, befejezésekor pedig a Befejezés gombra, ezt követően megtudjuk, hogy hány másodperc alatt oldottuk meg a feladványt.

ClearAll[start,end,kül];
Button["Indítás",start=AbsoluteTime[]]
Button["Befejezés", end=AbsoluteTime[]; kül=Floor[end-start];Print[Style["Az időd: ",20, Italic],Style[kül,20, Bold,Italic],Style[" másodperc",20,Italic]]]

A sudoku általánosabban, (n^2)×(n^2)-es táblára, amely, amely n×n-es négyzetekre van felosztva.

sudokuált[list_?ListQ, n_]:=Module[{i,j,sudokuseged},
sudokuseged=Map[If[#==0, FlipView[Map[Style[##, Darker[Green],30,Bold]&, Prepend[Range[(n^2)], " "]],   ImageSize->{30,30}, Alignment->{Center, Center}], #]&,list, {2}];

Grid[sudokuseged,ItemSize->{2,3},ItemStyle->Directive[FontSize->30,Automatic,Bold],Dividers ->All,
   Background -> {Automatic,Automatic,
Flatten[Table[{i, j} -> If[EvenQ[Plus @@ Floor[{i - 1, j - 1}/n]], 
Lighter[Green, 0.75], White], {i, (n^2)}, {j, (n^2)}]]}] 
]

sudokuált[sudoku2, 2]

Megoldás

2. 5. LOGIK' ART

A feladvány ugyanúgy néz ki, mint a mozaik esetében, csak teljesen mások a szabályok. Sőt, ez a típusú rejtvény színesben is létezik.

Fekete - fehér Logik' Art:

Az ábrában minden egynél nagyobb számnak van egy párja. Ha valamelyik számból kettőnél több van az ábrában (ez elég gyakran előfordul), akkor ki kell találni, hogy azok közül melyek alkotnak párt. A párt alkotó számokat össze kell kötni csakis a négyzetek középpontjain át vízszintesen és függőlegesen haladó, egymást nem metsző vonalakkal. A vonalak pont annyi négyzetet érintsenek, amilyen számokat kötnek össze. Ha mindegyik út be van rajzolva, akkor minden olyan négyzetet be kell satírozni, amelyben szám van (tehát az egyest tartalmazó mezőket is) vagy számokat összekötő vonal halad át rajta. Helyes megfejtés esetén az ábrából egy kép tűnik elő.

A megoldás menete két lépésben :

A következő program nagyon hasonló a mozaikoshoz, legenerálja egy mátrixból a feladvány tábláját.

Feladványgeneráló program (Fekete - fehér Logik' Art)

ClearAll[feketefeherlogic, lista];

(*A program ugyanaz, mint a Mozaiknál, csak mások a szabályok, és itt a gombokon kétjegyű számok is lehetnek.*)
feketefeherlogic[lista_?MatrixQ]:=
Module[{j,i,szinek,gomb,listt},

szinek[j_]:=Switch[Mod[j, 3],
0,listt={0.7333333333333333`,0.9483939879453727`,1.`},
1,listt={0.37254901960784315`,0.39215686274509803`,0.3686274509803922`},
2,listt={1,1,1}];

gomb[i_]:=DynamicModule[{jj=0},Button[If[i≠-1,i, " "],jj++,BaseStyle->{Bold,12},ImageSize->{20,18},FrameMargins->5,BaseStyle->14,Background->Dynamic[RGBColor[szinek[jj][[1]], szinek[jj][[2]],szinek[jj][[3]]]]]];

Grid[Map[gomb[#]&, lista, {2}],Frame->True, Spacings->{0.01,0.01}, Alignment->Center,FrameStyle->Thick]]

Feladványok betöltése

feketefeherlogic[ferfi]

Megoldás

Színes Logik' Art:

A színes Logik' Art ugyanolyan, mint a fekete, csak itt többféle színűek is lehetnek a számok, és az azonos színű számokra kell a fenti szabályt alkalmazni.

Feladványgeneráló program (Színes Logik' Art)

(*Színkódok megadására*)
{ColorSlider[Dynamic[x]],Dynamic[x]}

ClearAll[szamlista,szinmatrix,szin,gombs,rgbmatr,szink,mod,j,i,list,ii,jj];

(*A program bemenete három mátrix, az elsőben a számok szerepelnek, a harmadikban a szereplő színek kódjai úgy, hogy érdemes a többször előforduló színeket a lista elejére tenni, mert a második mátrix elemei a számok színeinek kódjai, ahol a kódok a színkódok indexei a színlistában (harmadik bemeneti mátrix).*)
szineslogic[szamlista_?MatrixQ, szinmatrix_?MatrixQ, szin_?MatrixQ]:=
Module[{rgbmatr,l, szink,list,ii,jj},

(*Az rgbmatr egy olyan mátrix, ahol a szinmatrix nem -1 helyein a számok színkódja szerepel, aműgy pedig {1,1,1}.*)
rgbmatr=Map[If[#≠-1, szin[[#]], {1,1,1}]&,szinmatrix,{2}];

(*Eleinte minden cella színe fehér lesz.*)
szink=Insert[szin, {1,1,1}, 1];
mod[j_]:=Mod[j, Dimensions[szink][[1]]]+1;

(*Itt készítünk egy olyan gombot, amin egy szám lesz, és a gomb háttere a megadott színkódok alapján változik. Eredetileg a háttere fehér.*)
gombs[i_, szinkod_]:=DynamicModule[{j=0},Button[If[i≠-1,Style[i, RGBColor[szinkod[[1]], szinkod[[2]], szinkod[[3]]]], " "],j++,BaseStyle->{Bold,12},ImageSize->{21,20},FrameMargins->5,BaseStyle->14,Background->Dynamic[RGBColor[szink[[mod[j]]][[1]], szink[[mod[j]]][[2]],szink[[mod[j]]][[3]]]]]];

(*Elkészítjük a gombokból álló táblázatot.*)
Grid[Table[gombs[szamlista[[ii]][[jj]], rgbmatr[[ii]][[jj]]], {ii,Dimensions[szamlista][[1]]}, {jj, Dimensions[szamlista][[2]]}],Frame->True, Spacings->{0.01,0.01}, Alignment->Center,FrameStyle->Thick]]

Színes Logik' Art feladványok betöltése

szineslogic[probamatrix, probaszin, probaszinlista]

szineslogic[cicaeger, cicaegerszinek, cicaegerszinlista]

Megoldás

Kisebb probléma a programmal, hogy egy cellának, ha olyan hátteret választunk, amilyen a szám színe, akkor nem látszódik tovább a szám.

2. 6. (SuperStar[SET!])

A (SuperStar[SET!]) a SET! játék egy módosítása.

A (SuperStar[SET!]) egy 81 kártyából álló játék. Minden kártyán lévő jelet 4 tulajdonság jellemez, ezek mindegyikéből 3 - 3 változat fordul elő (így a kártyák maximális száma (3^4)=81 lehet). A 4 tulajdonság:

a kártyán lévő figurák száma (1, 2 vagy 3);

a figurák alakja (kör, négyzet, ellipszis);

a kártya figuráinak színe (piros, zöld, lila);

a figurák széle (hiányzik, szaggatott, vastag);

Azt mondjuk, hogy 3 kártya "set(SuperStar[!])"-ot alkot, ha a 3 kártya minden tulajdonság szerint különböző. Például a következő három kártya "(SuperStar[set!])"-ot alkot: 1kph; 2nzs; 3elv.

Feladványgeneráló - és megoldóprogram

(*A feladványok száma m, egy 3 és 81 közötti véletlen szám.*)
m=Random[Integer,{3,81}];
kk={};

(*Az összes lehetséges kártya egy mátrixban.*)
lehetőségek=Flatten[Outer[List, {"1","2","3"},{"k","e","n"},{"p","z","l"},{"h","s","v"}], 3];

(*A lehet egy m hosszú 1 és 81 közötti különböző véletlen számokból álló lista.*)
lehet=RandomSample[Range[81],m];

(*A lehetőségekből kivesszük a lehetbeli számoknak megfelelő indexűeket. Ezek lesznek a generált véletlen feladványok. Már csak meg kell őket jeleníteni.*)
tabla=Map[lehetőségek[[#]]&, lehet];

(*Itt kezdődik a feladvány megoldása. Ehhez kell az index, hogy bármely három feladványt csak egyszer hasonlítsunk össze.*)
index=Flatten[Table[{i,j,k}, {i,1,m}, {j,i+1,m}, {k,j+1,m}],2];

vmike=Map[
Join[tabla[[#[[1]]]],tabla[[#[[2]]]],tabla[[#[[3]]]]]&
,index];
(*A kk-ba bekerülnek a jó megoldások.*)
Map[If[Length[Transpose[Tally[#]][[1]]]==12, AppendTo[kk, #]]&,vmike];
kk=Map[ToString, kk, {2}];
kk=Map[{Take[#, {1,4}], Take[#, {5,8}],Take[#, {9,12}]}&,kk];

(*A kártyák megjelenítése.*)
megjelenitt[{j_,jj_?LetterQ,jjj_?LetterQ, jjjj_?LetterQ} ]:=Module[
{list,szinlist,alak,kesz, lista,szam,szinn},
list={};
list={};
szam[tt_]:=Switch[tt, "1", {{0,0}}, "2", {{0,0}, {2,2}}, "3", {{0,0}, {1,1}, {2,2}}];
list=szam[j];
alak[ttt_?LetterQ, lista_?ListQ]:=Switch[ttt, "k",Map[Disk,lista ], "n",Map[Rectangle, lista ], "e", Map[Disk[#, {2,1}]&, lista]];
list=alak[jj,list];
szinn[tttt_?LetterQ]:=Switch[tttt, "p",Red, "z",Green, "l",Lighter[ Purple]];
szinlist=szinn[jjj];
list=Prepend[Riffle[list, szinlist], szinlist];
kesz[ttttt_?LetterQ, lista_?ListQ]:=Switch[ttttt,"h", Graphics[lista],"s", Graphics[Flatten[{EdgeForm[{Thickness[0.03],Dashed}],lista }]],"v",Graphics[Flatten[{EdgeForm[Thickness[0.03]],lista }]] ];
kesz[jjjj, list]
];

Style["Feladvány:",Blue,Italic,24,Bold ]

Row[Map[megjelenitt[{#[[1]], #[[2]], #[[3]], #[[4]]}]&,tabla, {1}]]
Style["Megoldások:",Blue,Italic,24,Bold ]

If[kk=={}, Style["Nincs SET!",Blue,Italic,24 ,Bold], Grid[Map[megjelenitt[{#[[1]], #[[2]], #[[3]], #[[4]]}]&,kk, {2}], Frame->True,Dividers->{Automatic,Thick}, ItemSize->10]]

3. Feladványok

Mozaik feladványok

Vissza

ClearAll[vonat, varazslo, pincer,lo,einstein,csibe,abra];

(*Kezdő szintű mozaik feladványok*)

vonat={{2,-1,3,-1,3,-1,3,-1,4,5,5,4,-1,-1,0},
{-1,-1,-1,3,-1,4,-1,4,-1,-1,-1, -1,-1, -1, -1},
{1,-1,2,1,2,2,3,2,2,2,-1,-1,4,3,-1},
{-1,-1,3,-1,3,-1,3,-1,0,-1,-1,-1,-1,4,-1},
{-1,-1,-1,-1,-1,-1,3,-1,-1,-1,-1,5,7,-1,-1},
{5,-1,-1,7,-1,6,-1,-1,-1,2, -1,-1, -1,-1,-1}, 
{-1,-1,5,-1,7,5,5,3,-1,-1,-1,-1, 5,4,1}, 
{5,-1,-1,7,-1,7,-1,-1,-1,-1,-1,7,-1,-1,-1},
{-1,-1,7,-1,-1,8,9,-1,-1,9,-1,-1,9,6,-1},
{5,-1,7,-1,8,-1,7,-1,9,-1,-1,-1,8,7,-1},
{4, -1,-1,-1,6,-1,-1,-1,6,6,-1,-1,-1,7,5},
{-1,-1,6,-1,-1,5,6,-1,-1,-1,-1,-1,-1,-1,-1},
{-1,8,7,-1,-1,7,-1,5,-1,5,8,8,-1,-1,4},
{-1,8,7,-1,-1,-1,-1,-1,4,-1,8,-1,5,-1,2},
{-1,-1,-1,-1,3,-1,5,-1,-1,-1,-1,-1,-1,-1,-1}
};

varazslo={
{-1,-1,-1,-1,-1,-1,6,4,-1,-1,-1,-1,-1,-1,-1,-1, 2,-1,3,-1,-1,-1,4,-1,-1},
{-1,5,-1,-1,9,-1,-1,-1,-1,-1,0,-1,-1,0,-1,-1,-1,4,-1,3,4,-1,-1,4,-1},
{-1,-1,9,-1,-1,-1,4,4,3,-1,-1,-1,-1,-1,-1,0,2,3,5,4,5,4,-1,-1,-1},
{-1,9,-1,-1,-1,2,-1,3,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,-1,-1},
{-1,-1,6,-1,3,-1,2,3,-1,-1,-1,1,-1,0,-1,-1,-1,-1,4,5,4,5,3,2,0},
{-1,-1,-1,-1,3,2,-1,-1,3,-1,-1,-1,0,-1,-1,0,-1,-1,-1,-1,3,-1,-1,-1,-1},
{6,-1,-1, 3, -1,-1, 2,2,-1,-1,4,-1,-1,-1,-1,-1,-1, 4,-1,1,-1,-1,3,2,0},
{-1,-1,6,-1,2,-1,-1,-1,3,-1,-1,3,-1,-1,0,2,-1,-1, 4,-1,0,-1,3,-1,-1},
{-1,9,7,-1,-1,-1,-1,1,3,4,-1,-1,-1,1,1,3,-1,4,-1,-1,-1,-1,-1,3,-1},
{-1,7,6,3,-1,-1,0,1,-1,-1,-1,-1,-1,-1,-1,4,4,-1,-1,4,-1,1,3,-1,-1},
{-1,5,5,-1,-1,-1,-1,1,-1,4,3,5,-1,-1,3,-1,2,-1,2,-1,3,-1,-1,3,-1},
{-1,-1,-1,4,3,-1,-1,-1,-1,-1,-1,-1,3,4,3,-1,-1,3,3,5,-1,-1,2,-1,-1},
{0,1,-1,4,4,-1,-1,-1,-1,-1,4,-1,-1,-1,2,3,-1,4,-1,-1,-1,-1,-1,-1,5},
{-1,-1,-1,-1,-1, 3, -1, -1, 2, -1 , 5, -1, -1, 0, -1, -1, 5, -1, -1, 6, -1, -1, 6, -1, 5},
{-1, -1, -1, -1, -1, -1, -1, -1, -1, 6,6,-1, -1, -1, 3, 3, -1, -1, -1, 5, -1, -1, -1, -1, -1},
{-1,0,0,-1,-1, 5,5,3,-1,-1,5,6,6,5,-1,3,-1,2,-1,3,-1,7,8,-1,-1},
{-1,-1,-1,-1,-1,-1,6,-1,3,-1,-1,-1,8,-1,6,-1, 3,3,5,4,-1,-1,-1,9,-1},
{-1,-1,-1,-1,8,-1,6,4,2,-1,-1,4,-1,8,7,-1,-1,-1,-1,-1,-1,-1,6,-1,6},
{-1,6,-1,9,-1,9,-1,6,-1,-1,1,-1,-1,-1, 5, -1, 3,-1,2,2,-1,-1,-1,-1,5},
{-1,-1,9,-1,-1,-1,9,-1,-1,4,-1,-1,3,-1,-1,5,-1,-1,-1,-1,3,-1,-1,6,-1},
{-1,8,-1,-1,9,-1,-1,9,-1,6,-1,-1,-1,-1,-1,-1,-1,7,7,6,-1,5,6,-1,-1},
{-1,-1,-1,-1,-1,-1,-1,-1,9, -1,-1,-1,-1,0,-1,-1,7,9,-1,9,-1,-1,7,-1,-1},
{6,-1,6, -1,-1,9,9,8,-1,7,-1,2,-1,2,-1,-1,7,-1,-1,-1,6,-1,-1,6,-1},
{-1,9,-1,-1,-1,8,8,-1,-1,7,-1,-1,-1,-1,3,-1,-1,-1,-1,-1,6,-1,-1,6,-1},
{-1,-1,-1,4,-1,-1,-1,-1,4,5,-1,4,-1,-1,-1,-1,5,-1,-1,6,-1,-1,4,-1,-1}
};

pincer={
{-1,-1,-1,0,-1,-1,-1,-1,6,6,-1,4,-1,-1,-1,-1,2,2,-1,-1},
{-1,2,-1,-1,-1,-1,5,8,-1,7,-1,-1,-1,4,-1,-1,-1,-1,0,-1},
{-1,-1,4,-1,0,-1,6,-1,7,-1,4,-1,-1,4,4,5,-1,-1,-1,-1},
{-1,-1,-1,3,-1,-1,-1,-1,-1,2,-1,-1,-1,-1,-1,6,4,5,-1,2},
{-1,7,5,-1,-1,5,6,4,-1,3,-1,-1,4,-1,4,-1,4,-1,-1,-1},
{4,-1,-1,-1,7,-1,-1,4,-1,3,-1,3,4,4,-1,-1,-1,-1,0,-1},
{4,-1,-1,5,-1,5,4,-1,-1,6,5,-1,-1,-1,-1,-1,-1,-1,-1,-1},
{-1,-1,-1,-1,4,-1,-1,-1,5,5,4,4,4,-1,-1,-1,3,4,-1,2},
{-1,0,-1,-1,-1,5,6,-1,-1,-1,-1,-1,-1,5,-1,-1,-1,-1,-1,-1},
{-1,-1,-1,-1,6,7,9,6,-1,-1,-1,3,-1,6,8,-1,5,-1,1,-1},
{0,-1,-1,6,-1,-1,-1,-1,-1,-1,3,-1, 3,-1,-1,9,-1,-1, -1,-1},
{-1,-1,7,-1,-1,7,-1,-1,-1,-1,-1,-1,-1,-1,9,-1,9,8,5,-1},
{-1,5,7,-1,5,-1,8,-1,4,-1,3,-1,-1,-1, 8,8,-1,-1,-1,-1},
{-1,7,-1,5,-1,-1,7,-1,5,-1,-1,-1,5,-1,-1,-1,-1,-1,-1,-1},
{-1,-1,-1,-1,-1,-1,-1,9,-1,-1,5,-1,-1,9,-1,6,-1,7,9,-1},
{-1,-1,-1,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
{-1,9,-1,-1,4,5,-1,-1,-1,5,-1,5,-1,9,-1,-1,6,-1,7,6},
{-1,-1,-1,5,2,-1,-1,2,-1,-1,2,-1,-1,7,-1,7,5,-1,7,-1},
{-1,-1,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, 4,-1,-1,-1,5},
{2,-1,-1,-1,3,-1,3,-1,3,-1,3,-1,-1,3,-1,-1,-1,4,-1,-1}
};

lo={
{1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,2,-1,2},
{-1,5,-1,6,-1,1,-1,2,-1,2,-1,1,-1,-1,-1},
{3,-1,7,-1,5,-1,-1,-1,3,-1,1,0,1,1,-1},
{-1,-1,-1,7,-1,-1,1,-1,1,-1,0,-1,-1,0,-1},
{-1,0,-1,-1,8,-1,-1,-1,-1,3,-1,-1,-1,-1,-1},
{0,-1,-1,-1,-1,-1,7,-1,-1,-1,5,-1,-1,-1,-1},
{-1,-1,-1,7,9,-1,-1,-1,-1,9,-1,6,-1,3,-1},
{-1,-1,-1,-1,-1,-1,9,-1,-1,-1,8,6,5,3,-1},
{3,-1,-1,8,-1,7,6,7,-1,-1,-1,-1,-1,-1,2},
{4,-1,-1,-1,6,-1,-1,-1,4,-1,6,-1,4,-1,-1},
{3,-1,4,4,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
{-1,-1,-1,-1,-1,-1,-1,0,3,3,-1,-1,4,-1,0},
{-1,-1,2,-1,2,-1,-1,-1,-1,3,2,3,-1,-1,-1},
{-1,0,0,-1,-1,-1,0,-1,2,-1,-1,-1,3,2,-1},
{-1,-1,-1,0,-1,-1,-1,-1,-1,-1,-1,2,-1,-1,-1}
};

abra={
{-1,5,6,-1,6,5,4,-1,-1,-1,-1,-1,-1,-1,-1},
{-1,-1,6,-1,6,-1,-1,-1,-1,4,6,5,-1,4,-1},
{3,-1,-1,5,-1,5,6,-1,4,-1,5,-1,5,-1,-1},
{3,-1,1,-1,1,-1,6,-1,5,-1,-1,5,-1,-1,4},
{-1,-1,-1,-1,-1,5,6,7,-1,3,-1,-1,3,-1,-1},
{-1,-1,3,-1,-1,4,-1,6,-1,-1,3,-1,3,-1,3},
{4,-1,-1,7,-1,-1,5,-1,-1,0,-1,-1,0,-1,3},
{4,-1,-1,7,7,-1,-1,-1,0,-1,-1,-1,0,-1,3},
{-1,-1,7,-1,6,5,-1,-1,-1,3,3,-1,-1,-1,-1},
{-1,-1,-1,-1,6,-1,-1,-1,-1,-1,5,-1,2,-1,-1},
{0,-1,-1,-1,-1,-1,-1,3,5,-1,-1,5,-1,-1,3},
{-1,-1,7,7,7,4,6,4,-1,-1,6,-1,3,-1,3},
{-1,-1,7,-1,5,-1,-1,3,-1,4,-1,4,-1,-1,4},
{-1,4,5,-1,-1,-1,7,-1,-1,-1,-1,-1,-1,-1,3},
{-1,-1,-1,-1,-1,3,-1,-1,2,0,-1,0,-1,-1,-1}
};

(*Haladó szintű mozaik feladványok*)

einstein={
{-1,1,-1,-1,3,-1,-1,-1,-1,-1,4,3,-1,-1,3,-1,-1,-1,3,-1,-1,2,1,0,-1},
{-1,-1,4,4,4,4,-1,-1,2,3,-1,4,-1,5,6,4,-1,-1,-1,-1,5,4,-1,-1,-1},
{-1,-1,6,-1,-1,2,-1,-1,3,-1,2,-1,3,5,-1,5,-1,4,-1,3,-1,5,5,-1,-1},
{-1,6,4,-1,-1,-1,5,4,2,-1,-1,2,2,-1,-1,-1,-1,5,6,-1,-1,-1,-1,5,-1},
{4,-1,-1,-1,5,6,-1,5,-1,-1,-1,-1,-1,0,0,-1,-1,-1,-1,5,4,-1,-1,6,-1},
{3,-1,4,5,-1,-1,-1,4,-1,-1,-1,0,-1,-1,-1,-1,-1,1,-1,5,-1,4,4,-1,-1},
{-1,7,-1,-1,5,5,5,-1,2,-1,-1,-1,-1,-1,-1,-1,0,-1,1,-1,3,-1,1,-1,3},
{5,7,6,-1,4,6,5,-1,1,-1,-1,-1,-1,0,-1,-1,-1,-1,-1,2,-1,-1,-1,3,-1},
{-1,5,-1,-1,5,6,5,-1,0,-1,0,-1,-1,-1,-1,-1,-1,0,-1,3,-1,1,-1,4,-1},
{2,-1,-1,-1,-1,4,-1,-1,-1,-1,-1,-1,0,-1,0,-1,-1,-1,-1,-1,5,-1,-1,-1,6},
{-1,-1,5,-1,5,-1,-1,2,-1,4,5,-1,-1,0,-1,-1,5,-1,-1,8,-1,-1,4,7,5},
{-1,-1,6,6,6,4,-1,3,-1,7,-1,5,-1,-1,-1,3,-1,-1,9,-1,5,-1,5,-1,5},
{-1,3,-1,-1,7,-1,-1,-1,-1,-1,5,-1,2,-1,-1,-1,-1,6,-1,7,-1,-1,5,6,4},
{-1,-1,-1,-1,5,7,-1,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,-1,-1,6,-1,5,-1},
{-1,6,-1,-1,-1,7,7,-1,1,-1,-1,-1,-1,1,2,2,-1,-1,-1,-1,-1,6,5,-1,-1},
{-1,8,-1,5,-1,-1,-1,5,-1,0,-1,-1,2,-1,-1,2,-1,-1,-1,-1,-1,-1,-1,-1,-1},
{-1,5,7,-1,-1,7,8,5,-1,-1,0,-1,4,-1,4,-1,2,0,-1,5,7,4,-1,-1,0},
{-1,-1,-1,4,-1,7,-1,-1,-1,1,-1,-1,-1,-1,-1,5,-1,-1,-1,5,6,-1,-1,-1,-1},
{-1,-1,-1,-1,-1,7,7,-1,-1,-1,5,7,8,-1,-1,8,6,-1,-1,4,-1,1,-1,-1,-1},
{-1,0,0,-1,-1,-1,-1,-1,-1,4,7,-1,8,-1,-1,8,-1,4,-1,5,-1,-1,-1,0,-1},
{-1,-1,-1,-1,-1,6,8,-1,-1,-1,5,6,5,-1,5,5,-1,-1,6,5,4,-1,-1,-1,-1},
{-1,-1,-1,4,-1,-1,-1,7,5,-1,4,-1,-1,-1,-1,3,-1,6,-1,-1,-1,-1,3,-1,-1},
{-1,3,-1,-1,-1,7,6,-1,-1,5,4,-1,3,-1,3,-1,4,6,-1,-1,6,-1,-1,-1,2},
{-1,-1,6,7,-1,9,-1,-1,-1,-1,4,4,3,3,3,3,-1,-1,8,9,-1,7,6,-1,4},
{2,-1,5,6,-1,-1,-1,4,-1,-1,-1,-1,-1,3,-1,-1,-1,-1,-1,-1,-1,6,5,4,-1}
};

csibe={
{-1,-1,-1,-1,-1,-1,5,-1,-1,0,-1,0,-1,-1,0,-1,-1,0,0,-1},
{-1,6,-1,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
{-1,-1,9,-1,-1,-1,-1,4,3,-1,-1,1,-1,-1,6,-1,-1,1,0,-1},
{-1,9,-1,7,-1,-1,3,-1,5,3,-1,-1,6,-1,-1,8,-1,-1,-1,-1},
{4,-1,7,-1,2,-1,-1,7,6,4,-1,5,-1,7,-1,-1,8,-1,-1,-1},
{-1,-1,5,3,-1,-1,-1,-1,6,-1,4,-1,7,-1,-1,-1,-1,6,-1,0},
{-1,3,-1,-1,3,4,-1,5,-1,-1,-1,6,-1,-1,6,-1,7,-1,-1,0},
{-1,-1,-1,-1,4,4,-1,5,-1,-1,4,-1,-1,8,8,-1,-1,-1,2,-1},
{-1,-1,5,3,-1,-1,-1,3,3,-1,-1,-1,6,8,-1,7,-1,-1,-1,-1},
{-1,4,-1,-1,1,-1,-1,-1,4,5,-1,7,-1,-1,-1,-1,5,-1,0,-1},
{-1,-1,-1,1,1,1,-1,2,-1,-1,4,-1,6,5,-1,4,-1,3,0,-1},
{-1,3,3,0,-1,3,4,-1,-1,-1,4,-1,5,-1,2,-1,2,-1,-1,-1},
{-1,-1,-1,-1,-1,-1,5,-1,-1,3,-1,-1,-1,4,-1,-1,1,-1,-1,0},
{-1,3,-1,1,1,-1,-1,-1,5,-1,-1,-1,3,-1,-1,0,-1,2,-1,1},
{-1,-1,3,-1,-1,-1,-1,4,4,-1,-1,-1,-1,-1,0,0,2,3,-1,-1},
{0,-1,3,3,-1,-1,3,3,4,-1,5,-1,-1,-1,-1,3,-1,-1,-1,3},
{-1,0,-1,3,-1,-1,4,-1,3,-1,-1,-1,0,-1,3,-1,3,4,-1,-1},
{-1,-1,1,-1,-1,4,-1,4,-1,-1,1,0,-1,-1,-1,-1,5,-1,3,-1},
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1,2,-1,-1,5,-1,-1},
{0,-1,2,4,4,3,-1,-1,4,3,-1,0,-1,-1,-1,-1,4,-1,2,-1}
};

Grafilogika feladványok

Vissza

halsor={
{1,1},
{0},
{1,9},
{1,2,3},
{2,3,1,1},
{1,1,1,1,2},
{1,2,1,1,3},
{1,1,1,6},
{2,3,1},
{1,3},
{7,6},
{1,1,2},
{4,1,1},
{2,3},
{9}
};

haloszlop={
{1,1,3,2},
{1,1,1,2},
{1,1,1,1,1,1},
{1,3,1,2},
{2,1,1,2},
{1,1,1,1,1,1,1},
{1,1,1,1,1},
{1,3,1},
{1,1},
{2,1,1,2},
{3,1,1,3},
{2,1,1,2,2},
{1,2,2,1},
{1,3,3,1},
{9}
};

smilesor={
{6},
{3,3},
{2,2},
{2,1,1,2},
{1,1},
{1,1,1,1},
{1,4,1},
{2,2},
{3,3},
{6}
};

smileoszlop={
{6},
{3,2},
{2,1,2},
{2,1,1,2},
{1,1,1},
{1,1,1},
{2,1,1,2},
{2,1,2},
{3,2},
{6}
};

 popeyesor={
{6},
{3,3},
{7,3},
{2,1, 1},
{2,9},
{5,1},
{1,1,1,1},
{1,3,2},
{1,1,2,2},
{1,8},
{2,5,1,1},
{2,6,2,1},
{2,3,3,1},
{1,1},
{2,1,1},
{3,5},
{2,3,2},
{2,7},
{4},
{2}
};

popeyeoszlop={
{2,3,2},
{4,11},
{3,4,2,1},
{3,1,4},
{1,1,3,1,4},
{1,1,2,3,2,1},
{1,1,2,3,1},
{2,2,1,1,3,1},
{1,1,1,2,1},
{4,1,2,2},
{1,5,1,1},
{1,1,1,1,1},
{1,1,2,2},
{3,1},
{1,1}
};

charliesor={
{2,5},
{2,7},
{2,7},
{10},
{14},
{2,1},
{2,2,3},
{1,1,1,1},
{1,1},
{1,2,1},
{1,2,1},
{1,1,3},
{2,1,1,1,1},
{4,3,1,1},
{6,2,1}
};

charlieoszlop={
{1,1},
{1,2},
{8,3},
{7,2,3},
{1,2,1,2},
{4,1,1,1},
{5,2,1},
{5,2,1},
{5,2,1},
{5,2,1,1},
{5,1,1,2},
{9},
{1,4},
{1,2},
{2}
};

monalisasor={
{3,9},
{2,8},
{2,7},
{1,8},
{1,7},
{1,6},
{1,6},
{2,2,3,7},
{2,3,1,10},
{2,2,1,1,5},
{2,6},
{2,6},
{2,7},
{2,2,7},
{3,1,8},
{3,2,8},
{4,1,9},
{5,10},
{6,12},
{6,8}
};

monalisaoszlop={
{13},
{15},
{3,6},
{2,1,4},
{2,3,3},
{1,3,2},
{1},
{2,1},
{1,2,1,1,1},
{1,1,1,1},
{1,2,2},
{2,3,3},
{4,1,6},
{5,2,8},
{9,10},
{20},
{20},
{19},
{19},
{17}
};

hajósor={
{1},
{1,1},
{2,2},
{3,3},
{4,4},
{5,5},
{2,1,2},
{15},
{12},
{9}
};

hajóoszlop={
{2},
{4},
{2,3},
{3,3},
{4,3},
{5,3},
{1,4},
{5,3},
{4,3},
{3,3},
{2,3},
{4},
{3},
{1},
{1}
};

Sudoku feladványok

Vissza

sudoku1={
{2,5,6,0,9,0,0,0,0},
{0,0,8,4,0,0,6,0,0},
{0,0,0,0,6,0,0,5,9},
{0,0,0,8,7,0,0,1,0},
{5,3,0,0,0,0,0,4,8},
{0,4,0,0,3,1,0,0,0},
{1,6,0,0,8,0,0,0,0},
{0,0,3,0,0,7,2,0,0},
{0,0,0,0,4,0,5,9,1}
};

sudoku2={
{1,0,0,3},
 {0,0,2,0},
 {0,3,0,4}, 
{0,1,0,0}
};

Fekete-fehér Logik' Art feladványok

Vissza

ferfi={
{3,-1,-1,-1,4,4,-1,-1,11,-1,-1,-1,9,-1,-1,-1,-1,2,2,-1,1,-1,8,-1,-1},
{-1,-1,12,-1,-1,-1,-1,6,-1,-1,-1,-1,-1,3,-1,3,-1,-1,-1,9,-1,-1,-1,-1,8},
{3,-1,11,-1,-1,-1,-1,-1,4,-1,-1,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,-1,3},
{-1,-1,-1,-1,6,-1,-1,-1,-1,-1,-1,-1,4,-1,2,8,9,4,-1,-1,-1,-1,-1,-1,1},
{-1,3,-1,3,-1,-1,-1,-1,7,-1,-1,1,7,-1,2,-1,-1,-1,6,4,4,4,-1,7,-1},
{-1,11,-1,-1,2,3,8,-1,-1,8,-1,-1,-1,4,-1,-1,9,-1,-1,-1,-1,-1,-1,-1,-1},
{12,-1,-1,-1,2,-1,-1,-1,2,2,-1,-1,-1,-1,-1,8,-1,-1,-1,7,11,-1,-1,-1,11},
{4,-1,-1,3,-1,3,-1,-1,-1,-1,-1,-1,3,-1,-1,-1,-1,-1,-1,-1,6,-1,-1,1,-1},
{-1,-1,3,-1,11,-1,-1,5,-1,-1,1,4,-1,3,-1,-1,4,4,-1,-1,-1,-1,-1,-1,1},
{-1,-1,-1,-1,11,-1,12,-1,5,5,-1,4,-1,-1,4,-1,-1,-1,2,4,-1,1,-1,2,2},
{4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,-1,2,-1,4,-1,-1,-1,5},
{-1,-1,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7,2,7,-1,4,4,-1,-1,-1,-1},
{-1,11,11,-1,6,-1,-1,4,-1,-1,2,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,5,-1,3,5},
{-1,-1,8,-1,-1,4,-1,-1,-1,5,-1,-1,-1,-1,-1,-1,6,-1,4,-1,5,-1,1,-1,3},
{-1,-1,-1,3,-1,-1,-1,-1,5,-1,-1,-1,5,-1,-1,-1,2,-1,6,3,-1,3,-1,-1,-1},
{-1,8,3,-1,-1,-1,-1,12,-1,-1,3,-1,-1,-1,-1,-1,2,-1,-1,-1,-1,-1,-1,4,7},
{-1,-1,-1,-1,-1,3,11,-1,-1,1,-1,1,-1,-1,-1,2,-1,-1,3,12,-1,-1,-1,4,-1},
{-1,-1,-1,-1,-1,-1,3,-1,4,4,3,-1,-1,12,-1,2,-1,4,-1,-1,-1,-1,-1,-1,-1},
{-1,5,2,2,2,-1,-1,-1,-1,-1,4,-1,-1,4,-1,-1,-1,-1,3,-1,-1,3,-1,-1,-1},
{5,-1,-1,-1,2,-1,-1,8,-1,-1,-1,-1,8,-1,-1,2,2,-1,-1,-1,-1,-1,7,4,4},
{-1,5,-1,-1,-1,5,3,-1,-1,-1,-1,-1,5,-1,-1,-1,-1,4,-1,-1,-1,3,7,-1,-1},
{-1,-1,-1,-1,1,-1,-1,-1,8,-1,-1,5,-1,1,-1,-1,2,2,2,-1,-1,-1,-1,-1,-1},
{-1,3,-1,3,-1,-1,3,-1,-1,-1,1,-1,4,-1,-1,-1,2,-1,4,-1,-1,-1,-1,-1,-1},
{-1,-1,-1,1,-1,-1,5,-1,-1,8,-1,-1,-1,-1,4,-1,-1,-1,4,-1,6,7,10,6,-1},
{6,-1,-1,-1,-1,6,-1,5,-1,-1,1,-1,7,-1,7,-1,8,-1,-1,8,-1,-1,-1,-1,10}
};

Színes Logik' Art feladványok

Vissza

probamatrix={{3,-1,3}, {1,2,2}};
probaszin={{1,-1,1},{3,2,2}};
probaszinlista= {{0,0,0}, {0.5,0.5,0.8}, {0.2,0.7,0.3}};

cicaegerszinek=
{{2, -1,-1,-1,-1,-1,-1,2,-1,-1,-1,-1,2,-1,2,-1,-1,-1,-1,-1,-1,2,-1,-1,-1,-1,2,-1,-1,-1},
{-1,-1,2,1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,2,-1,-1,-1,-1,-1,2,-1,-1,-1,2,-1,-1,-1,2,-1},
{-1,2,-1,-1,-1,-1,1,2,-1,-1,2,-1,-1,2,-1,-1,-1,1,2,-1,-1,-1,2,-1,2,-1,-1,-1,-1,-1},
{2,1,-1,-1,-1,-1,-1,-1,-1,-1,2,-1,-1,-1,-1,2,-1,-1,1,-1,2,-1,-1,-1,2,2,-1,-1,-1,-1},
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1,1,-1,1,1,-1,-1},
{-1,1,-1,-1,3,3,1,1,2,-1,-1,-1,-1,-1,-1,-1,-1,2,-1,-1,-1,-1,2,1,-1,-1,4,2,-1,-1},
{-1,3,1,-1,-1,1,3,-1,-1,2,-1,2,-1,-1,2,2,-1,-1,-1,-1,1,1,1,-1,-1,4,1,2,-1,2},
{-1,-1,-1,2,1,-1,1,-1,-1,1,-1,-1,-1,-1,-1,-1,2,2,-1,1,-1,-1,-1,1,-1,1,-1,-1,-1,-1},
{-1,-1,-1,-1,-1,1,-1,-1,-1,-1,1,2,-1,-1,2,-1,-1,-1,1,1,-1,1,-1,-1,-1,-1,1,-1,2,-1},
{-1,-1,-1,-1,-1,-1,2,1,-1,1,-1,1,-1,-1,2,-1,-1,-1,-1,-1,1,-1,-1,-1,1,1,-1,-1,1,2},
{-1,-1,2,-1,2,-1,-1,2,1,-1,-1,-1,-1,2,-1,2,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1},
{-1,-1,-1,-1,3,3,3,-1,-1,-1,-1,-1,-1,1,-1,2,-1,1,-1,1,-1,-1,-1,1,-1,1,-1,-1,-1,-1},
{-1,-1,-1,-1,-1,-1,-1,3,-1,3,-1,-1,-1,-1,-1,1,-1,-1,1,-1,-1,1,-1,1,-1,-1,-1,-1,-1,-1},
{-1,-1,-1,-1,-1,-1,-1,3,2,-1,-1,-1,-1,-1,-1,-1,-1,4,-1,4,-1,-1,-1,-1,1,-1,1,-1,-1,1},
{-1,3,2,2,2,3,-1,-1,-1,3,-1,-1,1,1,1,-1,-1,-1,4,-1,-1,-1,-1,-1,-1,1,-1,1,-1,2},
{-1,-1,-1,3,-1,-1,3,-1,-1,-1,2,-1,2,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1},
{-1,3,-1,-1,-1,-1,3,-1,-1,1,-1,-1,4,2,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,1,-1,-1,2,-1},
{-1,-1,-1,-1,-1,-1,-1,-1,3,3,-1,3,2,-1,2,1,-1,-1,-1,-1,-1,1,4,-1,-1,-1,-1,1,2,-1},
{2,3,-1,-1,-1,1,-1,-1,-1,-1,1,2,-1,-1,-1,1,1,-1,-1,1,1,4,-1,-1,-1,-1,-1,-1,1,2},
{-1,2,-1,3,1,2,-1,1,2,-1,3,1,2,-1,-1,2,1,-1,-1,-1,-1,-1,4,-1,-1,-1,-1,1,-1,-1},
{2,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,1,-1,1,1,-1,-1,-1,-1,-1,-1,-1,-1,1},
{3,-1,1,2,-1,2,-1,-1,2,-1,-1,2,-1,-1,-1,-1,-1,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,1},
{-1,-1,1,-1,-1,-1,-1,1,-1,-1,2,1,1,2,-1,-1,-1,2,-1,-1,-1,-1,-1,1,-1,-1,1,-1,1,-1},
{-1,-1,-1,-1,2,-1,3,2,-1,2,1,-1,-1,1,2,-1,-1,-1,-1,-1,-1,1,-1,-1,1,-1,1,-1,-1,-1},
{-1,2,2,-1,-1,-1,2,-1,-1,-1,-1,-1,1,-1,1,2,-1,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
{-1,-1,-1,-1,-1,-1,-1,-1,2,1,1,-1,-1,-1,-1,2,-1,-1,-1,-1,-1,1,-1,-1,-1,1,-1,-1,-1,-1},
{2,-1,-1,2,2,-1,-1,-1,-1,-1,-1,-1,1,-1,1,-1,-1,-1,-1,2,-1,2,1,1,1,-1,-1,1,1,-1},
{1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,-1,-1,-1,1,-1,-1,-1},
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,1,-1,-1},
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,-1}
};
cicaeger={{4, -1,-1,-1,-1,-1,-1,7,-1,-1,-1,-1,12,-1,10,-1,-1,-1,-1,-1,-1,3,-1,-1,-1,-1,15,-1,-1,-1},
{-1,-1,11,11,-1,14,-1,-1,-1,-1,-1,-1,-1,-1,12,-1,-1,-1,-1,-1,3,-1,-1,-1,4,-1,-1,-1,14,-1},
{-1,4,-1,-1,-1,-1,1,11,-1,-1,14,-1,-1,10,-1,-1,-1,8,12,-1,-1,-1,14,-1,4,-1,-1,-1,-1,-1},
{16,11,-1,-1,-1,-1,-1,-1,-1,-1,12,-1,-1,-1,-1,12,-1,-1,6,-1,12,-1,-1,-1,7,15,-1,-1,-1,-1},
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,6,-1,-1,-1,7,-1,4,4,-1,-1},
{-1,3,-1,-1,2,2,2,2,7,-1,-1,-1,-1,-1,-1,-1,-1,5,-1,-1,-1,-1,7,3,-1,-1,1,2,-1,-1},
{-1,9,3,-1,-1,3,1,-1,-1,7,-1,8,-1,-1,4,4,-1,-1,-1,-1,8,5,4,-1,-1,1,7,2,-1,8},
{-1,-1,-1,12,14,-1,10,-1,-1,1,-1,-1,-1,-1,-1,-1,6,5,-1,3,-1,-1,-1,3,-1,7,-1,-1,-1,-1},
{-1,-1,-1,-1,-1,3,-1,-1,-1,-1,10,7,-1,-1,8,-1,-1,-1,3,3,-1,4,-1,-1,-1,-1,7,-1,8,-1},
{-1,-1,-1,-1,-1,-1,12,3,-1,9,-1,15,-1,-1,14,-1,-1,-1,-1,-1,5,-1,-1,-1,4,4,-1,-1,9,1},
{-1,-1,5,-1,5,-1,-1,5,3,-1,-1,-1,-1,3,-1,3,-1,-1,-1,3,-1,-1,-1,-1,-1,-1,-1,9,-1,-1},
{-1,-1,-1,-1,2,2,3,-1,-1,-1,-1,-1,-1,4,-1,6,-1,15,-1,5,-1,-1,-1,8,-1,9,-1,-1,-1,-1},
{-1,-1,-1,-1,-1,-1,-1,3,-1,5,-1,-1,-1,-1,-1,4,-1,-1,5,-1,-1,3,-1,3,-1,-1,-1,-1,-1,-1},
{-1,-1,-1,-1,-1,-1,-1,6,5,-1,-1,-1,-1,-1,-1,-1,-1,3,-1,3,-1,-1,-1,-1,1,-1,4,-1,-1,9},
{-1,9,6,6,1,4,-1,-1,-1,5,-1,-1,9,6,3,-1,-1,-1,1,-1,-1,-1,-1,-1,-1,8,-1,7,-1,5},
{-1,-1,-1,8,-1,-1,11,-1,-1,-1,5,-1,5,-1,-1,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,-1,-1,-1,-1},
{-1,8,-1,-1,-1,-1,4,-1,-1,1,-1,-1,1,3,-1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,7,-1,-1,2,-1},
{-1,-1,-1,-1,-1,-1,-1,-1,6,5,-1,5,3,-1,6,6,-1,-1,-1,-1,-1,1,1,-1,-1,-1,-1,7,2,-1},
{16,11,-1,-1,-1,3,-1,-1,-1,-1,1,3,-1,-1,-1,2,2,-1,-1,2,2,7,-1,-1,-1,-1,-1,-1,7,5},
{-1,3,-1,12,3,5,-1,4,5,-1,11,1,3,-1,-1,6,3,-1,-1,-1,-1,-1,7,-1,-1,-1,-1,11,-1,-1},
{3,-1,-1,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5,3,-1,8,10,-1,-1,-1,-1,-1,-1,-1,-1,6},
{12,-1,2,5,-1,5,-1,-1,5,-1,-1,7,-1,-1,-1,-1,-1,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,6,-1,7},
{-1,-1,2,-1,-1,-1,-1,4,-1,-1,7,2,2,11,-1,-1,-1,9,-1,-1,-1,-1,-1,8,-1,-1,11,-1,7,-1},
{-1,-1,-1,-1,15,-1,11,1,-1,9,6,-1,-1,1,11,-1,-1,-1,-1,-1,-1,8,-1,-1,15,-1,10,-1,-1,-1},
{-1,8,5,-1,-1,-1,9,-1,-1,-1,-1,-1,4,-1,3,10,-1,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
{-1,-1,-1,-1,-1,-1,-1,-1,15,6,4,-1,-1,-1,-1,10,-1,-1,-1,-1,-1,5,-1,-1,-1,8,-1,-1,-1,-1},
{8,-1,-1,2,2,-1,-1,-1,-1,-1,-1,-1,14,-1,3,-1,-1,-1,-1,7,-1,9,5,15,3,-1,-1,16,16,-1},
{14,-1,-1,-1,-1,-1,-1,-1,-1,-1,12,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,12,3,-1,-1,-1,5,-1,-1,-1},
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,-1,-1,5,-1,-1},
{-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,-1,-1,-1,-1,-1,-1,-1}
};
cicaegerszinlista=
{{0,0,0},{0.`,0.709727626459144`,1.`},{0.7254901960784313`,0.41568627450980394`,0.26666666666666666`}, {1.`,0.`,0.`}};

4. Megoldások

lo

Vissza

hal

Vissza

monalisa

Vissza

smiley

Vissza

charlie

Vissza

férfi

Vissza

sudoku1

Vissza

sudoku2

Vissza

cicaeger

Vissza

5. Összegzés

Persze ez a munka sem tökéletes és teljes, mint ahogy ez általában szokott lenni. A programok hatékonyságán lehetne még javítani - őszintén megvallva -  erre nem is nagyon figyeltem, bár azért próbáltam funkcionális programozási eszközöket használni több-kevesebb sikerrel.

A Mozaikmegoldó program csak kezdő feladványokra működik, de haladóra nem tökéletes. Gondolkoztam rajta, de az összes lehetőség végigpróbálásán kívül nem jutottam előrébb. A Grafilogikával kapcsolatban ugyanezt el lehet mondani, sőt létezik színesben is, és a színes feladványokra is lehetett volna "játékprogramot" írni.

Nagy tervem volt még az is, hogy miután valaki megoldott egy feladványt, legyen valami gomb, amire kattintva megtudja, hogy jól oldotta - e meg. Ebben kudarcot vallottam, nem sikerült lekérdezni egy "dinamikus gomb" aktuális állapotát.

A színes Logik' Art - nál túl sokat kell gépelni a bemenetmátrixoknál, egyszerűbb lett volna talán egy mátrixba tenni a színeket és a számokat úgy, hogy elől van a szám, és mellette közvetlenül egy betű, ami valamilyen módon a szám színét mondaná meg.

A SET!*-nál pedig kisebb módosításokkal el lehetne érni, hogy a játék a valódi SET! legyen.

Eddig csak a problémákat soroltam fel, de voltaképp úgy érzem, hogy sok munka van a mostani dokumentum mögött is, és ami nagyon fontos, hogy végig élveztem, amit csinálok, és nem szenvedés volt az egész ...

6. Segédletek

Grafilogika, Mozaik, Logik' Art

Hyperlink["http://www.conceptispuzzles.com/index.htm"]

Set!

Hyperlink["http://www.setgame.com/set/puzzle_frame.htm"]