拼多多笔试之不同的骰子

问题

输入:n个骰子的状态(上下左右前后)

输出:骰子的种类数和每种的个数

相同的骰子:可以通过旋转达到相同状态的骰子
例如:123456 == 563412

一、首先定义骰子的标准状态:

  1. 1和2在相对面123 _ _ _
  2. 1和2在相邻面1_2 _ _ _

二、接着要实现骰子的状态转变

  1. 向前翻转90度
  2. 旋转90度
def t1(x):
    return [x[4],x[5],x[2],x[3],x[1],x[0]]
def t2(x):
    return [x[0],x[1],x[5],x[4],x[2],x[3]]

三、将一个随机状态转变为指定状态

def t(x):
    # 使1不在左右面
    if x[2] == 1 or x[3] == 1:
        x = t2(x)
    while x[0]!=1:
        x = t1(x)
    tag = 2
    if x[1] == 2:
        tag = 3
    while x[2]!=tag:
        x = t2(x)
    return x

对输入的序列调用上面的转换函数,然后就可以计算骰子的种类数和个数