[PYTHON] Organisation de bibliothèques professionnelles compétitives ~ dés ~

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é.

Diagramme de dés

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.

IMG_0742.jpg

Description du code

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.

code

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

Problème vérifié

AOJ Biased Dice Soumission → http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=4985962

Recommended Posts

Organisation de bibliothèques professionnelles compétitives ~ dés ~
Organiser la bibliothèque des professionnels du concours ~ Liste des numéros environ ~
Organiser la signification des méthodes, des classes et des objets
Disposition de la bibliothèque professionnelle de concours ~ Équation indéfinie linéaire bidimensionnelle ~
[Python] Obtenir la liste des noms ExifTags de la bibliothèque Pillow
Le début de cif2cell
Le sens de soi
L'histoire de sys.path.append ()
La vengeance des types: la vengeance des types
Hériter de la bibliothèque standard pour trouver la valeur moyenne de Queue
Exécutez l'intelligence de votre propre bibliothèque python avec VScode.
Paramètres pour entrer et déboguer le contenu de la bibliothèque avec VS Code