Feladat: I.289 Korcsoport: - Nehézségi fok: -
Füzet: 2012/március, 162 - 163. oldal  PDF  |  MathML 

A szöveg csak Firefox böngészőben jelenik meg helyesen. Használja a fenti PDF file-ra mutató link-et a letöltésre.

Gyermekkorunk egyik kedvelt játéka a dominó. Minden dominólap két nem negatív egész számból, illetve a két számnak megfelelő számú pöttyből áll. Egy N nagyságú (0N10) készletben minden szám 0 és N közötti. Két dominólap megegyezik, ha rajtuk a számok az olvasási sorrendtől függetlenül azonosak. Egy dominókészlet nem tartalmaz azonos dominókat.
Pédául egy 2-es dominókészlet a következő dominókat tartalmazza: [0 0] [0 1] [0 2] [1 1] [1 2] [2 2].
Első feladatunk, hogy állítsunk elő funkcionális algoritmussal az N-es dominókészletet. Az előállítást végző függvény bemenete N értéke, eredménye a dominólapok alábbi minta szerint rendezett sorozata.

 
PéldaEredmény   dominó[[0 0] [0 1] [0 2] [0 3] [1 1] [1 2] [1 3] [2 2]   3[2 3] [3 3]]   
 

Második feladatunk, hogy készítsünk függvényt, amely egy N-es dominókészlet összes pöttyeinek számát adja meg.
 
PéldaEredmény   pöttyszám12   2pöttyszám30   3
 

Egy nagy családban több gyereknek is van dominója, melyek játék közben összekeveredtek egymással.
Harmadik feladatként adjuk meg, hogy a dominók között melyek azok, amelyek többször fordulnak elő. A függvény bemenete a dominólapok nem rendezett listája, kimenete egy a fentiekhez hasonló rendezett lista.
 
PéldaEredmény   többször [[1 0] [2 5] [3 1] [0 2] [1 3] [3 1][[0 1] [1 3]]   [1 0] [2 4]]
 

A megoldáshoz az Imagine Logo programozási környezetet ajánljuk, de a feladat megoldható Neumann-elvű programozási nyelvvel is (C, C++, Pascal, ...). A megoldás során ‐ a be és kimenetektől eltekintve ‐ csak a programozási nyelv funkcionális részét használjuk. Ne alkalmazzunk változókat, csak rekurzió segítségével valósítsunk meg az ismétlést. Igyekezzünk a megoldást minél több paraméterezhető függvényre bontani. A funkcionális programozásról az I. 259. feladatnál részletesen olvashatunk.
Beküldendő egy i289.zip tömörített állományban a megoldás forráskódja (i289.imp Imagine Logo Project, i289.pas, i289.cpp, ...) és egy i289.txt szöveges állomány, amely ismerteti a megoldás során készített függvényeket és megadja, hogy a forrásállomány melyik fejlesztő környezetben fordítható.