J'ai créé une bibliothèque de dés pour ICPC. Je suis déçu que les dés ne soient pas sortis dans la production réelle, mais j'espère que cela sera utile pour ceux qui sortiront dans le futur. L'implémentation de l'opération de rotation, etc. est basée sur la bibliothèque d'Ushi-san. De plus, les fonctions d'alphabet et de rotation pour chaque visage ont des noms qui sont faciles à comprendre, alors veuillez les réécrire pour votre commodité.
Dans la figure ci-dessous, u est en haut, d en bas, f en avant, b en arrière, l à gauche et r à droite. En d'autres termes, dans la figure ci-dessous, la direction négative de l'axe y représente la face avant et la direction positive de l'axe x représente le côté droit **. L'anglais est également pris en charge sur d'autres aspects.
Lorsque vous placez un dé, ** spécifiez deux côtés qui ne viennent pas de l'autre côté ** et comment placer les dés est déterminé de manière unique. De plus, il existe 24 façons de placer les dés, comme cela est décidé en fixant la surface supérieure et en considérant le cas de la surface horizontale. L'état de la variable de classe est celui qui écrit les 24 manières. En d'autres termes, l'initialisation peut être effectuée en donnant des informations sur deux côtés qui sont connus au moment de l'initialisation. De plus, s'il n'y a pas de dés avec les deux côtés donnés par ** initialisation, une erreur est générée **. Notez également qu'il doit être initialisé avec les coordonnées de position initiale des dés.
Une fois initialisé, il ne reste plus qu'à implémenter la ** rotation à 6 directions **. À ce stade, chaque fonction Rotation a un alphabet supérieur à la fin pour indiquer le sens de rotation. La direction positive de l'axe y est le nord, la direction négative est le sud, la direction positive de l'axe x est l'est et la direction négative est l'ouest. Et la direction de rotation qui ne change pas les coordonnées est la direction gauche (gauche) et la direction droite (droite) vue de face. Dans cette fonction, les faces des dés sont permutées et les valeurs de coordonnées sont mises à jour pour une rotation dans quatre directions qui changent les coordonnées.
dice.py
# coding: UTF-8
import sys
class Dice:
#Tous les états des dés(u,d,f,b,l,ordre de r)(u+d=f+b=l+r=7 prises)
state=[[1,6,2,5,4,3],[1,6,3,4,2,5],[1,6,4,3,5,2],[1,6,5,2,3,4],
[2,5,1,6,3,4],[2,5,3,4,6,1],[2,5,4,3,1,6],[2,5,6,1,4,3],
[3,4,1,6,5,2],[3,4,2,5,1,6],[3,4,5,2,6,1],[3,4,6,1,2,5],
[4,3,1,6,2,5],[4,3,2,5,6,1],[4,3,5,2,1,6],[4,3,6,1,5,2],
[5,2,1,6,4,3],[5,2,3,4,1,6],[5,2,4,3,6,1],[5,2,6,1,3,4],
[6,1,2,5,3,4],[6,1,3,4,5,2],[6,1,4,3,2,5],[6,1,5,2,4,3]]
#u,d,f,b,l,r chaque 0,1,2,3,4,State1 comme 5,Spécifié dans state2
#value1,valeur2 est état1 respectivement,Visages correspondant à l'état2
#est maintenant les coordonnées de la position initiale
#Sortie d'erreur si non appropriée
def __init__(self,state1,value1,state2,value2,now):
self.now=[now[0],now[1]]
for i in range(24):
if Dice.state[i][state1]==value1 and Dice.state[i][state2]==value2:
self.u,self.d,self.f,self.b,self.l,self.r=Dice.state[i]
break
else:
print('Error:Constructor\'s Argument is missing.',file=sys.stderr)
exit()
#De l'axe y vu d'en haut+Tourner dans le sens(Le dos est le fond!)
def RotateN(self):
self.d,self.f,self.u,self.b=self.b,self.d,self.f,self.u
self.now[1]+=1
#De l'axe y vu d'en haut-Tourner dans le sens(Le devant est le bas!)
def RotateS(self):
self.d,self.f,self.u,self.b=self.f,self.u,self.b,self.d
self.now[1]-=1
#Axe X vu d'en haut+Tourner dans le sens(Le côté droit est le bas!)
def RotateE(self):
self.d,self.l,self.u,self.r=self.r,self.d,self.l,self.u
self.now[0]+=1
#Axe X vu d'en haut-Tourner dans le sens(Le côté gauche est le côté inférieur!)
def RotateW(self):
self.d,self.l,self.u,self.r=self.l,self.u,self.r,self.d
self.now[0]-=1
#Tourner à gauche vu de face(Sens antihoraire)
def RotateL(self):
self.f,self.l,self.b,self.r=self.r,self.f,self.l,self.b
#Tourner dans le sens des aiguilles d'une montre vu de face(sens horaire)
def RotateR(self):
self.f,self.l,self.b,self.r=self.l,self.b,self.r,self.f
AOJ Biased Dice Soumission → http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=4985962
Recommended Posts