[PYTHON] Wettbewerbsfähige professionelle Bibliotheksorganisation ~ Würfel ~

Ich habe eine Würfelbibliothek für ICPC erstellt. Ich bin enttäuscht, dass die Würfel in der eigentlichen Produktion nicht herausgekommen sind, aber ich hoffe, dass es für diejenigen hilfreich sein wird, die in Zukunft herauskommen werden. Die Implementierung der Rotationsoperation usw. basiert auf der Bibliothek von Ushi-san. Außerdem erhalten die Alphabet- und Rotationsfunktionen für jedes Gesicht Namen, die für Sie leicht verständlich sind. Schreiben Sie sie daher bitte um.

Würfeldiagramm

In der folgenden Abbildung ist u oben, d unten, f vorne, b hinten, l links und r rechts. Mit anderen Worten, in der folgenden Abbildung repräsentiert die negative Richtung der y-Achse die Vorderseite und die positive Richtung der x-Achse die rechte Seite **. Englisch wird auch in anderen Aspekten unterstützt.

IMG_0742.jpg

Codebeschreibung

Geben Sie beim Platzieren eines Würfels ** zwei Seiten an, die nicht auf die andere Seite kommen **, und die Platzierung der Würfel ist eindeutig festgelegt. Darüber hinaus gibt es 24 Möglichkeiten, die Würfel zu platzieren, da dies durch Fixieren der oberen Oberfläche und anschließendes Betrachten des Falls der horizontalen Oberfläche entschieden wird. Der Status der Klassenvariablen ist derjenige, der alle 24 Möglichkeiten ausschreibt. Mit anderen Worten kann die Initialisierung durchgeführt werden, indem Informationen auf zwei Seiten angegeben werden, die zum Zeitpunkt der Initialisierung bekannt sind. Wenn mit den beiden durch ** Initialisierung gegebenen Seiten keine Würfel vorhanden sind, wird ein Fehler ausgegeben **. Beachten Sie auch, dass es mit den anfänglichen Positionskoordinaten der Würfel initialisiert werden muss.

Nach der Initialisierung muss nur noch eine ** 6-Wege-Drehung ** implementiert werden. Zu diesem Zeitpunkt hat jede Rotationsfunktion am Ende ein oberes Alphabet, um die Drehrichtung anzuzeigen. Die positive Richtung der y-Achse ist Nord, die negative Richtung ist Süd, die positive Richtung der x-Achse ist Ost und die negative Richtung ist West. Und die Drehrichtung, die die Koordinaten nicht ändert, ist von links gesehen die linke Richtung (links) und die rechte Richtung (rechts). In dieser Funktion werden die Flächen der Würfel vertauscht und die Koordinatenwerte für die Drehung in vier Richtungen aktualisiert, die die Koordinaten ändern.

Code

dice.py


# coding: UTF-8
import sys

class Dice:
    #Alle Zustände der Würfel(u,d,f,b,l,Reihenfolge von r)(u+d=f+b=l+r=7 hält)
    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 jeweils 0,1,2,3,4,Zustand1 als 5,Angegeben in state2
    #value1,Wert2 ist jeweils Zustand1,Gesichter, die state2 entsprechen
    #Jetzt sind die Koordinaten der Ausgangsposition
    #Fehlerausgabe, falls nicht zutreffend
    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()

    #Von oben gesehen von der y-Achse+In Richtung drehen(Der Rücken ist der Boden!)
    def RotateN(self):
        self.d,self.f,self.u,self.b=self.b,self.d,self.f,self.u
        self.now[1]+=1

    #Von oben gesehen von der y-Achse-In Richtung drehen(Die Vorderseite ist die Unterseite!)
    def RotateS(self):
        self.d,self.f,self.u,self.b=self.f,self.u,self.b,self.d
        self.now[1]-=1

    #X-Achse von oben gesehen+In Richtung drehen(Die rechte Seite ist der Boden!)
    def RotateE(self):
        self.d,self.l,self.u,self.r=self.r,self.d,self.l,self.u
        self.now[0]+=1

    #X-Achse von oben gesehen-In Richtung drehen(Die linke Seite ist die Unterseite!)
    def RotateW(self):
        self.d,self.l,self.u,self.r=self.l,self.u,self.r,self.d
        self.now[0]-=1

    #Biegen Sie von vorne gesehen links ab(Gegen den Uhrzeigersinn)
    def RotateL(self):
        self.f,self.l,self.b,self.r=self.r,self.f,self.l,self.b

    #Von vorne gesehen im Uhrzeigersinn drehen(im Uhrzeigersinn)
    def RotateR(self):
        self.f,self.l,self.b,self.r=self.l,self.b,self.r,self.f

Verifiziertes Problem

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

Recommended Posts

Wettbewerbsfähige professionelle Bibliotheksorganisation ~ Würfel ~
Organisieren Sie die Bibliothek der Wettbewerbsprofis ~ Liste der ungefähren Zahlen ~
Organisieren Sie die Bedeutung von Methoden, Klassen und Objekten
Anordnung der professionellen Fachbibliothek ~ Zweidimensionale lineare unbestimmte Gleichung ~
[Python] Ruft die Liste der ExifTags-Namen der Pillow-Bibliothek ab
Der Beginn von cif2cell
Die Bedeutung des Selbst
Die Geschichte von sys.path.append ()
Rache der Typen: Rache der Typen
Erben Sie die Standardbibliothek, um den Durchschnittswert der Warteschlange zu ermitteln
Führen Sie die Intelligenz Ihrer eigenen Python-Bibliothek mit VScode aus.
Einstellungen zum Eingeben und Debuggen des Inhalts der Bibliothek mit VS-Code