Заинтересовала задача. Если ось следующего вращения будет перпендикулярна предыдущей, то получаются "правильные" комбинации.
#!/usr/bin/python3
from random import randint
list_s = ("R", "R'", "L", "L'", "F", "F'", "B", "B'", "U", "U'", "D", "D'", "R2", "R2'", "L2", "L2'", "F2", "F2'", "B2", "B2'", "U2", "U2'", "D2", "D2'")
dict_s = {
"F" : 0,
"F'" : 0,
"B" : 0,
"B'" : 0,
"F2" : 0,
"F2'": 0,
"B2" : 0,
"B2'": 0,
"U" : 1,
"U'" : 1,
"D" : 1,
"D'" : 1,
"U2" : 1,
"U2'": 1,
"D2" : 1,
"D2'": 1,
"R" : 2,
"R'" : 2,
"L" : 2,
"L'" : 2,
"R2" : 2,
"R2'": 2,
"L2" : 2,
"L2'": 2
}
s = []
def check(item):
a = dict_s[item]
b = dict_s[s[-1]]
if a == b:
# print('Not checked', s[-1], item)
return False
else:
return True
def get_item():
while True:
item = list_s[randint(0, len(list_s)-1)]
if len(s) == 0 or check(item):
break
return item
def print_scramble():
for i in range(20):
s.append(get_item())
for i in s:
print(i, end=' ')
print()
if __name__ == '__main__':
for i in range(10):
s.clear()
print_scramble()