现在Nero有一个数字魔方,他想知道这个魔方在操作不超过5次的前提下能达到的最大优美度是多少。
输入一行包含24个数字,按序号顺序给出魔方每一块上面的数字。所有数大小范围为[-100,100]。
输出一行包含一个数字,表示最大优美度。
2 -3 -2 3 7 -6 -6 -7 9 -5 -9 -3 -2 1 4 -9 -1 -10 -5 -5 -10 -4 8 2
8281
def top1(a):
a[0], a[1], a[4], a[22], a[23], a[9], a[10], a[20], a[21], a[15], a[18], a[19] =
a[10], a[4], a[18], a[20], a[22], a[0], a[19], a[21], a[23], a[1], a[15], a[9]
def top2(a):
top1(a), top1(a), top1(a)
def left1(a):
a[22], a[20], a[0], a[4], a[10], a[18], a[2], a[5], a[11], a[16], a[6], a[12] =
a[2], a[0], a[6], a[5], a[4], a[22], a[12], a[11], a[10], a[20], a[16], a[18]
def left2(a):
left1(a), left1(a), left1(a)
def back1(a):
a[23], a[22], a[9], a[1], a[0], a[4], a[8], a[3], a[2], a[5], a[7], a[6] =
a[8], a[9], a[7], a[3], a[1], a[23], a[6], a[2], a[0], a[22], a[5], a[4]
def back2(a):
back1(a), back1(a), back1(a)
def get_sum(a):
return a[0] * a[1] * a[2] *a[3] + a[6] * a[7] * a[12] * a[13] +
a[4] * a[5] * a[10] * a[11] + a[8] * a[9] * a[14] * a[15] +
a[16] * a[17] * a[18] * a[19] + a[20] * a[21] * a[22] * a[23]
def change(a, n):
if n == 5:
return get_sum(a)
top1(a)
c1 = change(a, n+1)
top2(a)
top2(a)
c2 = change(a, n+1)
top1(a)
back1(a)
c3 = change(a, n+1)
back2(a)
back2(a)
c4 = change(a, n+1)
back1(a)
left1(a)
c5 = change(a, n+1)
left2(a)
left2(a)
c6 = change(a, n+1)
left1(a)
return max(c1, c2, c3, c4, c5, c6, get_sum(a))
if name == 'main':
a = list(map(int, input().split()))
print(max(change(a, 0), get_sum(a)))
(a+b) in [1,9]&nbs***bsp;((a+b)==5 and (a in [2,3]))因为 和为5 有多种可能性。
arr=[2,-3,-2,3,7,-6,-6,-7,9,-5,-9,-3,-2,1,4,-9,-1,-10,-5,-5,-10,-4,8,2] #旋转 def y0(s,n): if n==0: # 沿y轴向前 s[6],s[7],s[8],s[9],s[23],s[22],s[4],s[5],s[1],s[0],s[2],s[3]=s[4],s[5],s[6],s[7],s[8],s[9],s[23],s[22],s[3],s[1],s[0],s[2] elif n==1: #沿y轴向后 s[4],s[5],s[6],s[7],s[8],s[9],s[23],s[22],s[3],s[1],s[0],s[2]=s[6],s[7],s[8],s[9],s[23],s[22],s[4],s[5],s[1],s[0],s[2],s[3] elif n==2: #沿x轴向前 s[1],s[3],s[7],s[13],s[17],s[19],s[21],s[23],s[8],s[14],s[15],s[9]=s[7],s[13],s[17],s[19],s[21],s[23],s[1],s[3],s[14],s[15],s[9],s[8] elif n == 3: #沿x轴向后 s[7],s[13],s[17],s[19],s[21],s[23],s[1],s[3],s[14],s[15],s[9],s[8]=s[1],s[3],s[7],s[13],s[17],s[19],s[21],s[23],s[8],s[14],s[15],s[9] elif n == 4: #沿z周逆时针 s[6],s[7],s[13],s[12],s[8],s[14],s[17],s[16],s[11],s[5],s[2],s[3]=s[7],s[13],s[12],s[6],s[17],s[16],s[11],s[5],s[2],s[3],s[8],s[14] elif n == 5: #沿z周顺时针 s[7],s[13],s[12],s[6],s[17],s[16],s[11],s[5],s[2],s[3],s[8],s[14]=s[6],s[7],s[13],s[12],s[8],s[14],s[17],s[16],s[11],s[5],s[2],s[3] return s #求优美值 def addsum(s): return s[0]*s[1]*s[2]*s[3]+s[8]*s[9]*s[14]*s[15]+s[6]*s[7]*s[12]*s[13]+s[4]*s[5]*s[10]*s[11]+s[16]*s[17]*s[18]*s[19]+s[20]*s[21]*s[22]*s[23] #筛掉无用的旋转 def guolv(g): def jiance(a,b): #a+b =1 有两种可能 a=0 b=1 或 a=1 b=0,方向刚好相反,视为无效 #a+b =9 有两种可能 a=5 b=4 或 a=4 b=5,方向刚好相反,视为无效 #a+b =5 则有多种可能,可能是(2,3) (1,4) (0,5) ,只有(2,3)才有是 方向相反的过滤掉。 if (a+b) in [1,9]&nbs***bsp;((a+b)==5 and (a in [2,3])): return 100,100 else: return a,b for d in range(len(g)-1): g[d],g[d+1]=jiance(g[d],g[d+1]) return list(filter(lambda r: r!=100, g)) n=6 #遍历出各种可能性 result_list=[] for x in range(n): if guolv([x]) not in result_list: result_list.append(guolv([x])) #插入只旋转1次情况 for y in range(n): if guolv([x, y]) not in result_list: result_list.append(guolv([x, y])) #插入旋转2次情况 for z in range(n): if guolv([x, y, z]) not in result_list: result_list.append(guolv([x, y, z])) #插入旋转3次情况 for w in range(n): if guolv([x, y, z, w]) not in result_list: result_list.append(guolv([x, y, z, w])) #插入旋转4次情况 for u in range(n): #插入旋转5次情况 if x==y==z==w: #前4次旋转方向一致,可以视为没变化 if [u] not in result_list: result_list.append([u]) elif u==y==z==w: #后4次旋转方向一致,可以视为没变化 if [x] not in result_list: result_list.append([x]) else: if guolv([x,y,z,w,u]) not in result_list: result_list.append(guolv([x, y, z, w, u])) # print(result_list) result=addsum(arr) #遍历取最大值 for x in result_list: for y in x: arr=y0(arr, y) result=max(addsum(arr),result) print(result)
cubeArray = list(map(int,input().strip().split())) def rotation_circle(cubeArray,opNum): if opNum==1: cubeArray_index_2 = cubeArray[2] cubeArray_index_3 = cubeArray[3] cubeArray[2] = cubeArray[8] cubeArray[3] = cubeArray[14] cubeArray[8] = cubeArray[17] cubeArray[14] = cubeArray[16] cubeArray[16] = cubeArray[5] cubeArray[17] = cubeArray[11] cubeArray[5] = cubeArray_index_3 cubeArray[11] =cubeArray_index_2 cubeArray_index_6 = cubeArray[6] cubeArray[6] = cubeArray[7] cubeArray[7] = cubeArray[13] cubeArray[13] = cubeArray[12] cubeArray[12] = cubeArray_index_6 else: cubeArray_index_0 = cubeArray[0] cubeArray_index_1 = cubeArray[1] cubeArray[0] = cubeArray[9] cubeArray[1] = cubeArray[15] cubeArray[9] = cubeArray[19] cubeArray[15] = cubeArray[18] cubeArray[19] = cubeArray[10] cubeArray[18] = cubeArray[4] cubeArray[4] = cubeArray_index_1 cubeArray[10] = cubeArray_index_0 cubeArray_index_22 = cubeArray[22] cubeArray[22] = cubeArray[23] cubeArray[23] = cubeArray[21] cubeArray[21] = cubeArray[20] cubeArray[20] = cubeArray_index_22 return cubeArray def rotation_left_right(cubeArray,opNum): if opNum==1: cubeArray_index_23 = cubeArray[23] cubeArray_index_22 = cubeArray[22] cubeArray[23] = cubeArray[8] cubeArray[22] = cubeArray[9] cubeArray[8] = cubeArray[6] cubeArray[9] = cubeArray[7] cubeArray[6] = cubeArray[4] cubeArray[7] = cubeArray[5] cubeArray[4] = cubeArray_index_23 cubeArray[5] =cubeArray_index_22 cubeArray_index_3 = cubeArray[3] cubeArray[3] = cubeArray[2] cubeArray[2] = cubeArray[0] cubeArray[0] = cubeArray[1] cubeArray[1] = cubeArray_index_3 else: cubeArray_index_21 = cubeArray[21] cubeArray_index_20 = cubeArray[20] cubeArray[21] = cubeArray[14] cubeArray[20] = cubeArray[15] cubeArray[14] = cubeArray[12] cubeArray[15] = cubeArray[13] cubeArray[12] = cubeArray[10] cubeArray[13] = cubeArray[11] cubeArray[10] = cubeArray_index_21 cubeArray[11] = cubeArray_index_20 cubeArray_index_18 = cubeArray[18] cubeArray[18] = cubeArray[19] cubeArray[19] = cubeArray[17] cubeArray[17] = cubeArray[16] cubeArray[16] = cubeArray_index_18 return cubeArray def rotation_up_down(cubeArray,opNum): if opNum==1: cubeArray_index_21 = cubeArray[21] cubeArray_index_23 = cubeArray[23] cubeArray[21] = cubeArray[17] cubeArray[23] = cubeArray[19] cubeArray[17] = cubeArray[7] cubeArray[19] = cubeArray[13] cubeArray[7] = cubeArray[1] cubeArray[13] = cubeArray[3] cubeArray[1] = cubeArray_index_21 cubeArray[3] =cubeArray_index_23 cubeArray_index_14 = cubeArray[14] cubeArray[14] = cubeArray[8] cubeArray[8] = cubeArray[9] cubeArray[9] = cubeArray[15] cubeArray[15] = cubeArray_index_14 else: cubeArray_index_20 = cubeArray[20] cubeArray_index_22 = cubeArray[22] cubeArray[20] = cubeArray[16] cubeArray[22] = cubeArray[18] cubeArray[16] = cubeArray[6] cubeArray[18] = cubeArray[12] cubeArray[6] = cubeArray[0] cubeArray[12] = cubeArray[2] cubeArray[0] = cubeArray_index_20 cubeArray[2] = cubeArray_index_22 cubeArray_index_4 = cubeArray[4] cubeArray[4] = cubeArray[10] cubeArray[10] = cubeArray[11] cubeArray[11] = cubeArray[5] cubeArray[5] = cubeArray_index_4 return cubeArray def sum_caculation(cubeArray): sumArray = 0 sumArray += cubeArray[0]*cubeArray[1]*cubeArray[2]*cubeArray[3] sumArray += cubeArray[4] * cubeArray[5] * cubeArray[10] * cubeArray[11] sumArray += cubeArray[6] * cubeArray[7] * cubeArray[12] * cubeArray[13] sumArray += cubeArray[8] * cubeArray[9] * cubeArray[14] * cubeArray[15] sumArray += cubeArray[16] * cubeArray[17] * cubeArray[18] * cubeArray[19] sumArray += cubeArray[20] * cubeArray[21] * cubeArray[22] * cubeArray[23] return sumArray def rotation_judgement(j,cubeArray,maxSum): if j ==0: cubeArray = rotation_circle(cubeArray,1) maxSum = max(maxSum,sum_caculation(cubeArray)) elif j==1: cubeArray = rotation_circle(cubeArray, 2) maxSum = max(maxSum, sum_caculation(cubeArray)) elif j==2: cubeArray = rotation_circle(cubeArray, 1) cubeArray = rotation_circle(cubeArray, 1) cubeArray = rotation_circle(cubeArray, 1) maxSum = max(maxSum, sum_caculation(cubeArray)) elif j==3: cubeArray = rotation_circle(cubeArray, 2) cubeArray = rotation_circle(cubeArray, 2) cubeArray = rotation_circle(cubeArray, 2) maxSum = max(maxSum, sum_caculation(cubeArray)) elif j==4: cubeArray = rotation_left_right(cubeArray, 1) maxSum = max(maxSum, sum_caculation(cubeArray)) elif j==5: cubeArray = rotation_left_right(cubeArray, 2) maxSum = max(maxSum, sum_caculation(cubeArray)) elif j==6: cubeArray = rotation_left_right(cubeArray, 1) cubeArray = rotation_left_right(cubeArray, 1) cubeArray = rotation_left_right(cubeArray, 1) maxSum = max(maxSum, sum_caculation(cubeArray)) elif j==7: cubeArray = rotation_left_right(cubeArray, 2) cubeArray = rotation_left_right(cubeArray, 2) cubeArray = rotation_left_right(cubeArray, 2) maxSum = max(maxSum, sum_caculation(cubeArray)) elif j==8: cubeArray = rotation_up_down(cubeArray, 1) maxSum = max(maxSum, sum_caculation(cubeArray)) elif j==9: cubeArray = rotation_up_down(cubeArray, 2) maxSum = max(maxSum, sum_caculation(cubeArray)) elif j==10: cubeArray = rotation_up_down(cubeArray, 1) cubeArray = rotation_up_down(cubeArray, 1) cubeArray = rotation_up_down(cubeArray, 1) maxSum = max(maxSum, sum_caculation(cubeArray)) else: cubeArray = rotation_up_down(cubeArray, 2) cubeArray = rotation_up_down(cubeArray, 2) cubeArray = rotation_up_down(cubeArray, 2) maxSum = max(maxSum, sum_caculation(cubeArray)) return cubeArray,maxSum maxSum = -100*100*100*100*6-1 cubeArray1 = cubeArray[:] for i in range(12): cubeArray = cubeArray1[:] cubeArray,maxSum = rotation_judgement(i,cubeArray,maxSum) cubeArray2 = cubeArray[:] for j in range(12): cubeArray = cubeArray2[:] cubeArray, maxSum = rotation_judgement(j, cubeArray, maxSum) cubeArray3 = cubeArray[:] for k in range(12): cubeArray = cubeArray3[:] cubeArray, maxSum = rotation_judgement(k, cubeArray, maxSum) cubeArray4 = cubeArray[:] for l in range(12): cubeArray = cubeArray4[:] cubeArray, maxSum = rotation_judgement(l, cubeArray, maxSum) cubeArray5 = cubeArray[:] for q in range(12): cubeArray = cubeArray5[:] cubeArray, maxSum = rotation_judgement(q, cubeArray, maxSum) print(maxSum)