サイコロ (Dice)
概要
サイコロに関する処理を扱う。
AOJ: "ITP1_11_A: Dice I" ベースの実装
実装
# サイコロ: 長さ6 のリストで表現する
# L0 = [A, B, C, D, E, F]
#
# このリストは以下の展開図のサイコロを表現する
# A
# DBCE
# F
# 立方体のサイコロを上から見た図
# E
# DAC (裏にF)
# B
D = [
(1, 5, 2, 3, 0, 4), # 'U'
(3, 1, 0, 5, 4, 2), # 'R'
(4, 0, 2, 3, 5, 1), # 'D'
(2, 1, 5, 0, 4, 3), # 'L'
]
p_dice = (0, 0, 0, 1, 1, 2, 2, 3)*3
# サイコロを回転
def rotate_dice(L, k):
return [L[e] for e in D[k]]
# サイコロL0 を回転しながら24種を列挙
def enumerate_dice(L0):
L = L0[:]
for k in p_dice:
yield L
L[:] = (L[e] for e in D[k])
# サイコロの回転からグラフを構成
def dice_graph(L0 = [0, 1, 2, 3, 4, 5]):
DA = list(map(tuple, enumerate_dice(L0)))
# DA.sort()
DM = {tuple(e): i for i, e in enumerate(DA)}
G = [list(DM[tuple(rotate_dice(ds, i))] for i in range(4)) for ds in DA]
return DA, G
DA, DG = dice_graph()
Verified
-
AOJ: "0198: Trouble in Shinagawa’s Artifacts": source (Python3, 0.10sec)
-
AOJ: "1290: Traveling Cube": source (Python3, 3.14sec)
-
AOJ: "2379: Bicube": source (Python3, 0.04sec)
-
AOJ: "1197: A Die Maker": source (Python3, 29.74sec)
-
AOJ: "1118: Nets of Dice": source (Python3, 0.05sec)
-
AOJ: "1259: Colored Cubes": source (Python3, 5.04sec)