nowcoder(nowcoder题库)

nowcoder(nowcoder题库)1 输入示例 带可视化显示 2 YYYYRRRRWWWW 3 UUL 4 import copy 5 import draw cube 这个是可视化的代码 6 Sn Ni 0 1 常量 Sn 代表顺时针 Ni 代表逆时针 7 F R B L U D 0 1 2 3 4 5 随意

大家好,我是讯享网,很高兴认识大家。




讯享网

 1 # 输入示例:带可视化显示  2 # YYYYRRRRWWWWOOOOGGGGBBBB  3 # UUL‘  4 import copy  5 import draw_cube#这个是可视化的代码  6 Sn, Ni = 0, 1 #常量Sn代表顺时针,Ni代表逆时针  7 F, R, B, L, U, D = 0,1,2,3,4,5 #随意,我只是根据题目来而已  8 two_d_matrix = [[0,0,0,0] for i in range(6)] #批量初始化6个面。每一个面有2*2就是4个元素,这个使用一维数组代替是因为如果使用二级数组会很麻烦  9  10 Fr = [U, R, D, L] #Xr代表的是 X个面中,移动的4个面序列  11 Fm = [(2,3), (0, 2), (1, 0), (3, 1)] #Xm代表的是每个面依次对照的影响元素的位置默认全为顺时针方向【本来应该是(0,0)~(1,1)二进制化就好了】  12 Lr = [U, F, D, B]  13 Lm = [(0,2), (0, 2), (0, 2), (3, 1)]  14 Dr = [F, R, B, L]  15 Dm = [(2,3), (2, 3), (2, 3), (2, 3)]  16 Rr = [D, F, U, B]  17 Rm = [(3,1), (3, 1), (3, 1), (0, 2)]  18 Ur = [F, L, B, R]  19 Um = [(1,0), (1, 0), (1, 0), (1, 0)]  20 Br = [R, U, L, D]  21 Bm = [(3,1), (1, 0), (0, 2), (2, 3)]  22 #输入的转动映射  23 char_to_turn = {U:(U,Sn), U’:(U, Ni), F:(F,Sn),F‘:(F,Ni) , L:(L,Sn),L’:(L,Ni),  24 D:(D,Sn) ,D‘:(D,Ni) , R:(R,Sn), R’:(R,Ni), B:(B, Sn), B‘:(B, Ni)}  25 #全部面的关联面序列以及影响移动框序列,上面的二层抽象,方便后续操作  26 X_r = {F:Fr, R:Rr, B:Br, L:Lr, U:Ur, D:Dr}  27 X_m = {F:Fm, R:Rm, B:Bm, L:Lm, U:Um, D:Dm}  28  29 def trun_X_round(round_name:int, S_or_N:int):  30 “”“  31  将X面进行翻转  32  :param round_name: 输入翻转的面常量  33  :param S_or_N: 输入顺时针或者是逆时针  34 ”“”  35 x_round = two_d_matrix[round_name]  36 new_round = copy.deepcopy(x_round)#一定要深拷贝,不然好像是会直接修改,因为浅复制是映射到同一个指针  37 if S_or_N == Sn: #根据转向去翻转,顺序无所谓,逻辑要一致,这里使用了两个数组来简化,0-3类比为二进制(x,y)就像x={0,1} y={0,1}  38 new_round[1] = x_round[0]  39 new_round[3] = x_round[1]  40 new_round[2] = x_round[3]  41 new_round[0] = x_round[2]  42 else:  43 new_round[1] = x_round[0]  44 new_round[3] = x_round[1]  45 new_round[2] = x_round[3]  46 new_round[0] = x_round[2]  47 # print(new_round) #输出测试  48 two_d_matrix[round_name] = new_round  49  50 def get_value(X_round:int, idx:tuple):#获取某个索引的值,返回的以面为单位,如[“G”,“G”]  51 return [  52 two_d_matrix[X_round][idx[0]], two_d_matrix[X_round][idx[1]]  53  ]  54  55 def trun_other_round_Sn(X_round:int):  56 “”“  57  翻转X影响的其他部分【受X干扰的面】  58  :param X_round:输入面常量  59 ”“”  60 Xr = X_r[X_round] #获取所选面X的关联面序列,下为影响移动框序列  61 Xm_ori = X_m[X_round]  62 temp_value = [get_value(Xr[i], Xm_ori[i]) for i in range(4)] #批量保存原移动框的值,方便后续覆盖  63 #因为顺时针,所以第一个索引[0]移动后实际上变为最后一个[3]可以理解为循环链表,因为第一个比较特殊,拎出来做一次,理解了这个循环其实就是剩下3个idx[1,2,3]的移动  64 two_d_matrix[Xr[0]][Xm_ori[0][0]], two_d_matrix[Xr[0]][Xm_ori[0][1]] = temp_value[3][0], temp_value[3][1]  65 for idx, Xm in enumerate(Xm_ori):  66 if idx > 0:  67 #每次顺时针旋转,当前面的两个元素变为前一个面的两个元素,因为一个面有两个影响元素,temp_value以列表存储,每个存储两个元素列表,不理解调试一下就好了  68 two_d_matrix[Xr[idx]][Xm[0]] , two_d_matrix[Xr[idx]][Xm[1]] = temp_value[idx-1][0], temp_value[idx-1][1]  69 # print(two_d_matrix)  70  71 return  72 def trun_other_round_Ni(X_round:int):  73 #就是翻转了一下,就ok了,其他不影响,因为怎么转,点之间都是对应的  74 Xr = list(reversed(X_r[X_round]))  75 Xm_ori = list(reversed(X_m[X_round]))  76 temp_value = [get_value(Xr[i], Xm_ori[i]) for i in range(4)]  77  78 two_d_matrix[Xr[0]][Xm_ori[0][0]], two_d_matrix[Xr[0]][Xm_ori[0][1]] = temp_value[3][0], temp_value[3][1]  79 for idx, Xm in enumerate(Xm_ori):  80 if idx > 0:  81 two_d_matrix[Xr[idx]][Xm[0]] , two_d_matrix[Xr[idx]][Xm[1]] = temp_value[idx-1][0], temp_value[idx-1][1]  82 # print(two_d_matrix)  83  84 if name == main:  85  86 input_list = input()  87 draw_cube.show_cube_list(input_list)#可视化输入的二阶魔法平面图  88 count_input = 0  89 for i in range(6):  90 for k in range(4):#根据输入构造二维矩阵(数组),k和前面设置的常量一一对应  91 two_d_matrix[i][k] = input_list[count_input]  92 count_input += 1  93  94 turn_list = []  95 turn_input = input()  96 for idx, turn_one in enumerate(turn_input):  97 if idx != len(turn_input)-1:  98 if turn_input[idx+1] == :#当下一个为翻转的字符时加上并存入  99 add_char = turn_one + turn_input[idx+1] 100 turn_list.append(char_to_turn[add_char])#映射完存的实际上是(X_round,Sn_or_Ni) 101 else: 102 turn_list.append(char_to_turn[turn_one])#没有就直接存 103 elif turn_one != : 104 turn_list.append(char_to_turn[turn_one])#末尾不是翻转符那就存入翻转序列 105 for X, angle in turn_list:#遍历翻转数列 106 trun_X_round(X, angle)#先对X本面进行翻转【for内顺序无所谓】 107 if angle == Sn: 108 trun_other_round_Sn(X_round=X)#如果是顺时针就调用顺时针,否则就调用逆时针 109 elif angle == Ni: 110 trun_other_round_Ni(X_round=X) 111 112 for i in two_d_matrix:#构造输出 113 for k in i: 114 print(k,end=“”) 115  draw_cube.show_cube() 116 117 #YYYYRRRRWWWWOOOOGGGGBBBB 119 #OBRBWOWRYOYRGYGYWGBRBOWG 120

讯享网

小讯
上一篇 2025-05-31 11:35
下一篇 2025-06-16 11:21

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/188428.html