Upload failed. Maybe wrong permissions?

User Tools

Site Tools


Így készült a Rubik

Egy ideje már törpöltem, hogy lehetne összehozni egy online Rubik-kockát, és nemrég hozzáláttam. Érdekes adatkezelési probléma.
  Egy darabig tartotta magát az a verzió, hogy a cubie-kat tároljuk, vagyis minden él- és sarokkocka egy-egy elem a tömbjeinkben, ahol arról is van egy adat, hogy milyen állásban van éppen az illető. Aztán ráakadtam az ICube-ra, ami leveszi a vállamról az ábrázolás gondját, és beláttam, hogy akkor mégiscsak a faceleteket kell tárolni.
  A tömbünk szerkezete egyszerű, minden oldal egy elem, minden elem kilenc karakter hosszú szöveg; a kulcs az oldal színe, ami egyezik a kilenc karakteres szöveg középső karakterével. A ravaszdiság a forgatásokban van. Nem tudom, mások hogyan kezelik a relatív forgatásokat, én ünnepeltem a nagy eszemet, amiért rájöttem, hogy abszolút forgatások is létezhetnek. De gyanítom, hogy másnak ez adekvát.
  Eredetileg úgy terveztem, hogy az abszolút forgatások csak belső használatra szolgálnak majd, hiszen a kockológia alapvetően relatív forgatásokkal operál. De milyen praktikusak lesznek az abszolút forgatások, hiszen a tömbünkben abszolút kockaállapotot tárolunk, tehát a piros oldal elforgatása két műveletből fog állni, egyrészt átrendezzük a piros tömbelem tartalmát, másrészt a vele szomszédos négy elemét is, és mindig tudjuk, hogy melyik az a négy. Ez utóbbi viszont komplikáltabb dolog. Egy oldal elforgatásakor négy másik oldalról három-három elemet át kell vinni egy másik oldalra, de az oldalon belül nem mindig ugyanoda. Úgyhogy erre írni kellett egy kis leírónyelvet, hogy mi hova vándorol és milyen sorrendben, és egy-egy másolássorozatban egyszer vagy kétszer átmeneti tárhelyre is kell tenni az elemeket, mint a változók értékének cseréjénél.
  Aztán mialatt ezt megcsináltam, rájöttem, hogy az abszolút forgatás nagyon hasznos dolog, vétek lenne kihagyni a programból. Persze a relatív is kell, hiszen a szakirodalomban ez van, tehát megcsináltam a konvertálási táblázatot; ez nyolc elem, mindegyik egy-egy nézetet reprezentál, és azt tartalmazza, hogy az egyes oldalak milyen irányba esnek az adott nézetben.

»»»»»»