A Rubik-kocka matematikai reprezentációja és egy Python-alapú megoldó szkript kombinációja egy izgalmas téma. Az alábbiakban bemutatom a Rubik-kocka reprezentációját, majd egy egyszerű Python-implementáció alapjait.
Fehér (F):
W W W W W W W W W
Hasonlóan a többi szín.
Az alábbi kód egy egyszerű Rubik-kocka reprezentáció és forgatások modellezésére szolgál:
import numpy as np
class RubikCube:
def __init__(self):
# A 6 oldal mátrix reprezentációja (F, B, U, D, L, R)
self.faces = {
'F': np.array( * 3 for _ in range(3)]), # Front - Fehér
'B': np.array( * 3 for _ in range(3)]), # Back - Sárga
'U': np.array( * 3 for _ in range(3)]), # Up - Piros
'D': np.array( * 3 for _ in range(3)]), # Down - Narancs
'L': np.array( * 3 for _ in range(3)]), # Left - Zöld
'R': np.array( * 3 for _ in range(3)]) # Right - Kék
}
def print_cube(self):
"""Kocka állapotának kiírása"""
for face, grid in self.faces.items():
print(f"{face} oldal:")
print(grid)
print()
def rotate_face(self, face, clockwise=True):
"""Egy oldal forgatása (órairányban vagy ellentétesen)"""
if clockwise:
self.faces = np.rot90(self.faces, -1)
else:
self.faces = np.rot90(self.faces, 1)
# Használat
cube = RubikCube()
cube.print_cube()
cube.rotate_face('F') # Front oldal forgatása órairányban
cube.print_cube()
Egy megoldó algoritmus általában heurisztikus keresést használ, például: - Kocka állapotának beolvasása. - Iteratív keresés (pl. A* vagy BFS) a megoldási lépések megtalálásához. - God’s algorithm: A legrövidebb megoldás keresése.
Egyszerű Python-alapú solver létrehozásához használhatjuk a Kociemba
-algoritmust, amelyet egy létező Rubik-kocka könyvtár biztosít.
rubik_solver
csomag használatáraTelepítés:
pip install rubik_solver
Kód:
from rubik_solver import utils
# Kocka állapotának megadása
# Példa: A kocka oldalszíneit meg kell adni egyetlen karakterláncban
# 'UUUUUUUUURRRRRRRRRFFFFFFFFFDDDDDDDDDLLLLLLLLLBBBBBBBBB'
scrambled_state = "UUUUUUUUURRRRRRRRRFFFFFFFFFDDDDDDDDDLLLLLLLLLBBBBBBBBB"
# Megoldás generálása
solution = utils.solve(scrambled_state)
print("Megoldás lépései:", solution)
Ha mélyebb algoritmikus megértést keresel, érdemes implementálni: 1. Keresési algoritmusokat (DFS, BFS, IDDFS). 2. Heurisztikákat: - Manhattan-távolság az elemek helyétől. - Edge és corner orientáció.