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.
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.
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.
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
AOJ Biased Dice Einreichung → http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=4985962
Recommended Posts