VAL = 1.5
cols = "ybrgow"
faces = "ulfrbd"

pos = {
    "f0": (1.5, -1, 1),
    "f1": (1.5, 0, 1),
    "f2": (1.5, 1, 1),
    "f3": (1.5, -1, 0),
    "f4": (1.5, 0, 0),
    "f5": (1.5, 1, 0),
    "f6": (1.5, -1, -1),
    "f7": (1.5, 0, -1),
    "f8": (1.5, 1, -1),
    
    "b8": (-1.5, -1, -1),
    "b7": (-1.5, 0, -1),
    "b6": (-1.5, 1, -1),
    "b5": (-1.5, -1, 0),
    "b4": (-1.5, 0, 0),
    "b3": (-1.5, 1, 0),
    "b2": (-1.5, -1, 1),
    "b1": (-1.5, 0, 1),
    "b0": (-1.5, 1, 1),
    
    "r0": (1, 1.5, 1),
    "r1": (0, 1.5, 1),
    "r2": (-1, 1.5, 1),
    "r3": (1, 1.5, 0),
    "r4": (0, 1.5, 0),
    "r5": (-1, 1.5, 0),
    "r6": (1, 1.5, -1),
    "r7": (0, 1.5, -1),
    "r8": (-1, 1.5, -1),
    
    "l0": (-1, -1.5, 1),
    "l1": (0, -1.5, 1),
    "l2": (1, -1.5, 1),
    "l3": (-1, -1.5, 0),
    "l4": (0, -1.5, 0),
    "l5": (1, -1.5, 0),
    "l6": (-1, -1.5, -1),
    "l7": (0, -1.5, -1),
    "l8": (1, -1.5, -1),
    
    "d0": (1, -1, -1.5),
    "d1": (1, 0, -1.5),
    "d2": (1, 1, -1.5),
    "d3": (0, -1, -1.5),
    "d4": (0, 0, -1.5),
    "d5": (0, 1, -1.5),  
    "d6": (-1, -1, -1.5),
    "d7": (-1, 0, -1.5),
    "d8": (-1, 1, -1.5), 
    
    "u0": (-1, -1, 1.5),
    "u1": (-1, 0, 1.5),
    "u2": (-1, 1, 1.5),
    "u3": (0, -1, 1.5),
    "u4": (0, 0, 1.5),
    "u5": (0, 1, 1.5),
    "u6": (1, -1, 1.5),
    "u7": (1, 0, 1.5),
    "u8": (1, 1, 1.5),
}

planes = {
    "f": lambda x: x[0],
    "r": lambda x: x[1],
    "u": lambda x: x[2]    
}

inv_pos = {v: k for k, v in pos.items()}
dct = {}  

r_x = lambda x, cc=1: (x[0], cc * x[2], -cc * x[1]) 
r_y = lambda x, cc=1: (-cc * x[2], x[1], cc * x[0])
r_z = lambda x, cc=1: (cc * x[1], -cc * x[0], x[2])

rs = (r_x, r_y, r_z)

ds = (("f", "b", "Z", "S", 1), ("r", "l", "X", "M", -1), ("u", "d", "Y", "E", 1))

for i in range(3):
    a, b, c, d, sgn = ds[i]
    rot = rs[i]
    A, B, ap, bp, cp, dp, Ap, Bp = a.upper(), b.upper(), a + "'", b + "'", c + "'", d + "'", a.upper() + "'", b.upper() + "'"
    p = planes[a]
    for x in (a, b, A, B, ap, bp, cp, d, dp, Ap, Bp, c):
        dct[x] = {}    
    for k, v in pos.items():        
        vc, vcc = rot(v, 1), rot(v, -1)
        inv_c, inv_cc = inv_pos[vc], inv_pos[vcc], 
        dct[c][k] = inv_c
        dct[cp][k] = inv_cc
        if p(vc) > 0:
            dct[A][k] = inv_c
            dct[a][k] = inv_c
            dct[Ap][k] = inv_cc
            dct[ap][k] = inv_cc
        elif p(vc) < 0:
            dct[b][k] = inv_cc
            dct[bp][k] = inv_c
            dct[B][k] = inv_cc
            dct[Bp][k] = inv_c
        elif p(vc) == 0:
            dct[a][k] = inv_c
            dct[ap][k] = inv_cc
            dct[b][k] = inv_cc
            dct[bp][k] = inv_c
            dct[d][k] = inv_c if a == "f" else inv_cc
            dct[dp][k] = inv_cc if a == "f" else inv_c
print(dct)
def show(state):
        indent = ' ' * 6
        U = state[:9] #self.get_side('U')
        up = indent + '+-----+' + '\n' + indent + '|' + ' '.join(U[:3]) + '|\n' + indent + '|' + ' '.join(
            U[3:6]) + '|\n' + indent + '|' + ' '.join(U[6:]) + '|\n'
        D = state[-9:] #self.get_side('D')
        down = indent + '|' + ' '.join(D[:3]) + '|\n' + indent + '|' + ' '.join(
            D[3:6]) + '|\n' + indent + '|' + ' '.join(D[6:]) + '|\n' + indent + '+-----+' + '\n'

        middle = [list(state[9:18]), list(state[18:27]), list(state[27:36]), list(state[36:45])] #[self.get_side(x) for x in ['L', 'F', 'R', 'B']]
        
        upper_middle = '|' + ''.join([' '.join(side[:3]) + '|' for side in middle])
        middle_middle = '|' + ''.join([' '.join(side[3:6]) + '|' for side in middle])
        lower_middle = '|' + ''.join([' '.join(side[6:]) + '|' for side in middle])

        output = up + '+-----' * 4 + '+\n' + upper_middle + '\n' + middle_middle + '\n' + lower_middle + '\n' + '+-----' * 4 + '+\n' + down
        return output


def repr(hsh):
        state = "".join("".join(hsh[k] for k in (f"{f}{i}" for i in range(9))) for f in faces)
        indent = ' ' * 6
        U = state[:9] #self.get_side('U')
        up = indent + '+-----+' + '\n' + indent + '|' + ' '.join(U[:3]) + '|\n' + indent + '|' + ' '.join(
            U[3:6]) + '|\n' + indent + '|' + ' '.join(U[6:]) + '|\n'
        D = state[-9:] #self.get_side('D')
        down = indent + '|' + ' '.join(D[:3]) + '|\n' + indent + '|' + ' '.join(
            D[3:6]) + '|\n' + indent + '|' + ' '.join(D[6:]) + '|\n' + indent + '+-----+' + '\n'

        middle = [list(state[9:18]), list(state[18:27]), list(state[27:36]), list(state[36:45])] #[self.get_side(x) for x in ['L', 'F', 'R', 'B']]
        
        upper_middle = '|' + ''.join([' '.join(side[:3]) + '|' for side in middle])
        middle_middle = '|' + ''.join([' '.join(side[3:6]) + '|' for side in middle])
        lower_middle = '|' + ''.join([' '.join(side[6:]) + '|' for side in middle])

        output = up + '+-----' * 4 + '+\n' + upper_middle + '\n' + middle_middle + '\n' + lower_middle + '\n' + '+-----' * 4 + '+\n' + down
        return output

def update(cmd, state):
    new_state = {k: v for k, v in state.items()}
    h = dct[cmd]
    print(h)
    for k, v in h.items():
        new_state[v] = state[k]
    return new_state
    

def perform(seq):

    state = {f"{f}{j}":c for j in range(9) for c, f in zip(cols, faces)}
    for cmd in seq.split(' '):
        new_state = {k: v for k, v in state.items()}
        if len(cmd) == 2 and cmd[1] == '2':
            for _ in range(2):
                state = update(cmd[:1], state)
        else:
            state = update(cmd, state)

    st = "".join("".join(state[k] for k in (f"{f}{i}" for i in range(9))) for f in faces)
    print(repr(state))
    return st

ans = {'F': 'yyyyyybbbbbwbbwbbwrrrrrrrrryggyggyggooooooooogggwwwwww', 'R': 'yyryyryyrbbbbbbbbbrrwrrwrrwgggggggggyooyooyoowwowwowwo', 'U': 'yyyyyyyyyrrrbbbbbbgggrrrrrroooggggggbbboooooowwwwwwwww', 'L': 'oyyoyyoyybbbbbbbbbyrryrryrrgggggggggoowoowoowrwwrwwrww', 'D': 'yyyyyyyyybbbbbbooorrrrrrbbbggggggrrroooooogggwwwwwwwww', 'B': 'gggyyyyyyybbybbybbrrrrrrrrrggwggwggwooooooooowwwwwwbbb', "F'": 'yyyyyygggbbybbybbyrrrrrrrrrwggwggwggooooooooobbbwwwwww', "R'": 'yyoyyoyyobbbbbbbbbrryrryrrygggggggggwoowoowoowwrwwrwwr', "U'": 'yyyyyyyyyooobbbbbbbbbrrrrrrrrrgggggggggoooooowwwwwwwww', "L'": 'ryyryyryybbbbbbbbbwrrwrrwrrgggggggggooyooyooyowwowwoww', "D'": 'yyyyyyyyybbbbbbrrrrrrrrrgggggggggooooooooobbbwwwwwwwww', "B'": 'bbbyyyyyywbbwbbwbbrrrrrrrrrggyggyggyooooooooowwwwwwggg', 'F2': 'yyyyyywwwbbgbbgbbgrrrrrrrrrbggbggbggoooooooooyyywwwwww', 'R2': 'yywyywyywbbbbbbbbbrrorrorrogggggggggroorooroowwywwywwy', 'U2': 'yyyyyyyyygggbbbbbbooorrrrrrbbbggggggrrroooooowwwwwwwww', 'L2': 'wyywyywyybbbbbbbbborrorrorrgggggggggoorooroorywwywwyww', 'D2': 'yyyyyyyyybbbbbbgggrrrrrroooggggggbbboooooorrrwwwwwwwww', 'B2': 'wwwyyyyyygbbgbbgbbrrrrrrrrrggbggbggbooooooooowwwwwwyyy', 'M': 'yoyyoyyoybbbbbbbbbryrryrryrgggggggggowoowoowowrwwrwwrw', 'E': 'yyyyyyyyybbbooobbbrrrbbbrrrgggrrrgggooogggooowwwwwwwww', 'S': 'yyybbbyyybwbbwbbwbrrrrrrrrrgyggyggygooooooooowwwgggwww', "M'": 'yryyryyrybbbbbbbbbrwrrwrrwrgggggggggoyooyooyowowwowwow', "E'": 'yyyyyyyyybbbrrrbbbrrrgggrrrgggooogggooobbbooowwwwwwwww', "S'": 'yyygggyyybybbybbybrrrrrrrrrgwggwggwgooooooooowwwbbbwww', 'M2': 'ywyywyywybbbbbbbbbrorrorrorgggggggggorooroorowywwywwyw', 'E2': 'yyyyyyyyybbbgggbbbrrrooorrrgggbbbgggooorrrooowwwwwwwww', 'S2': 'yyywwwyyybgbbgbbgbrrrrrrrrrgbggbggbgooooooooowwwyyywww', 'f': 'yyybbbbbbbwwbwwbwwrrrrrrrrryygyygyygoooooooooggggggwww', 'r': 'yrryrryrrbbbbbbbbbrwwrwwrwwgggggggggyyoyyoyyowoowoowoo', 'u': 'yyyyyyyyyrrrrrrbbbggggggrrroooooogggbbbbbbooowwwwwwwww', 'l': 'ooyooyooybbbbbbbbbyyryyryyrgggggggggowwowwowwrrwrrwrrw', 'd': 'yyyyyyyyybbboooooorrrbbbbbbgggrrrrrroooggggggwwwwwwwww', 'b': 'ggggggyyyyybyybyybrrrrrrrrrgwwgwwgwwooooooooowwwbbbbbb', "f'": 'yyyggggggbyybyybyyrrrrrrrrrwwgwwgwwgooooooooobbbbbbwww', "r'": 'yooyooyoobbbbbbbbbryyryyryygggggggggwwowwowwowrrwrrwrr', "u'": 'yyyyyyyyyoooooobbbbbbbbbrrrrrrrrrgggggggggooowwwwwwwww', "l'": 'rryrryrrybbbbbbbbbwwrwwrwwrgggggggggoyyoyyoyyoowoowoow', "d'": 'yyyyyyyyybbbrrrrrrrrrgggggggggooooooooobbbbbbwwwwwwwww', "b'": 'bbbbbbyyywwbwwbwwbrrrrrrrrrgyygyygyyooooooooowwwgggggg', 'f2': 'yyywwwwwwbggbggbggrrrrrrrrrbbgbbgbbgoooooooooyyyyyywww', 'r2': 'ywwywwywwbbbbbbbbbroorooroogggggggggrrorrorrowyywyywyy', 'u2': 'yyyyyyyyyggggggbbboooooorrrbbbbbbgggrrrrrrooowwwwwwwww', 'l2': 'wwywwywwybbbbbbbbboorooroorgggggggggorrorrorryywyywyyw', 'd2': 'yyyyyyyyybbbggggggrrroooooogggbbbbbbooorrrrrrwwwwwwwww', 'b2': 'wwwwwwyyyggbggbggbrrrrrrrrrgbbgbbgbbooooooooowwwyyyyyy', 'X': 'rrrrrrrrrbbbbbbbbbwwwwwwwwwgggggggggyyyyyyyyyooooooooo', 'Y': 'yyyyyyyyyrrrrrrrrrgggggggggooooooooobbbbbbbbbwwwwwwwww', 'Z': 'bbbbbbbbbwwwwwwwwwrrrrrrrrryyyyyyyyyoooooooooggggggggg', "X'": 'ooooooooobbbbbbbbbyyyyyyyyygggggggggwwwwwwwwwrrrrrrrrr', "Y'": 'yyyyyyyyyooooooooobbbbbbbbbrrrrrrrrrgggggggggwwwwwwwww', "Z'": 'gggggggggyyyyyyyyyrrrrrrrrrwwwwwwwwwooooooooobbbbbbbbb', 'X2': 'wwwwwwwwwbbbbbbbbbooooooooogggggggggrrrrrrrrryyyyyyyyy', 'Y2': 'yyyyyyyyygggggggggooooooooobbbbbbbbbrrrrrrrrrwwwwwwwww', 'Z2': 'wwwwwwwwwgggggggggrrrrrrrrrbbbbbbbbboooooooooyyyyyyyyy'}

test = "U"    
perform(test)
res = ans[test]
print(show(res))

Embed on website

To embed this program on your website, copy the following code and paste it into your website's HTML: