경쟁 전문 라이브러리 구성 ~ 주사위 ~
또한 각 면의 알파벳 및 회전의 함수는 자신의 알기 쉬운 이름으로 하고 있으므로, 사용할 때는 편리하게 재작성해 주세요.
주사위 그림
아래 그림에서 주사위 표면의 u는 up, d는 down, f는 front, b는 back, l은 left, r은 right를 나타냅니다. 즉 아래 그림에서 y축의 부의 방향이 전면을 나타내고, x축의 양의 방향이 우면을 나타냅니다. 다른 면에 대해서도 마찬가지로 영어에 대응합니다.
코드 설명
주사위를 놓을 때 반대쪽에는 오지 않는 2면을 지정하면 주사위를 놓는 방법은 고유하게 결정됩니다. 또한 주사위를 놓는 방법은 위의 면을 고정하고 나서 옆의 면의 경우 나누기를 생각하는 것으로 정해지므로, 모두 24가지 있습니다. 그 24가지를 모두 내보낸 것이 클래스 변수의 state가 됩니다. 즉, 초기화 시점에서 알고 있는 2면의 정보를 주는 것으로 초기화를 할 수 있습니다. 또, 초기화로 주어진 2면을 가지는 주사위가 존재하지 않을 때는 에러 출력을 하도록 하고 있습니다. 그리고 주사위의 초기 위치 좌표로 초기화해야 합니다.
초기화를 할 수 있으면, 나머지는 6 방향의 회전을 실장할 뿐입니다. 이 때, 각각의 Rotate 함수에는 대문자의 알파벳이 말미에 대해 있어 각각 회전 방향을 나타냅니다. 또한 y축의 정방향을 북(North), 부방향을 남쪽(South), x축의 정방향을 동(East), 부방향을 서(West)로 하고 있습니다. 그리고 좌표를 바꾸지 않는 회전 방향은 전면에서 보고 왼쪽 방향(Left), 오른쪽 방향(Right)으로 하고 있습니다. 이 함수 내에서는 주사위의 면을 바꾸는 것과 동시에, 좌표를 바꾸는 4 방향의 회전에 대해서는 좌표의 값도 갱신합니다.
코드
dice.py# coding: UTF-8
import sys
class Dice:
#サイコロの全状態(u,d,f,b,l,rの順)(u+d=f+b=l+r=7が成り立つ)
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をそれぞれ0,1,2,3,4,5としてstate1,state2に指定
#value1,value2はそれぞれstate1,state2に対応する面の目
#nowは初期位置の座標
#適切でない場合はエラー出力
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()
#上から見てy軸の+方向に回転(後面が下面に!)
def RotateN(self):
self.d,self.f,self.u,self.b=self.b,self.d,self.f,self.u
self.now[1]+=1
#上から見てy軸の-方向に回転(前面が下面に!)
def RotateS(self):
self.d,self.f,self.u,self.b=self.f,self.u,self.b,self.d
self.now[1]-=1
#上から見てx軸の+方向に回転(右面が下面に!)
def RotateE(self):
self.d,self.l,self.u,self.r=self.r,self.d,self.l,self.u
self.now[0]+=1
#上から見てx軸の-方向に回転(左面が下面に!)
def RotateW(self):
self.d,self.l,self.u,self.r=self.l,self.u,self.r,self.d
self.now[0]-=1
#前から見て左回転(反時計回り)
def RotateL(self):
self.f,self.l,self.b,self.r=self.r,self.f,self.l,self.b
#前から見て右回転(時計回り)
def RotateR(self):
self.f,self.l,self.b,self.r=self.l,self.b,self.r,self.f
verify한 문제
AOJ Biased Dice
제출 → h tp : // Judge. 우아이즈. 아 c. jp / 온네 네쥬 드게 / 레즈 에에 w. jsp? 리 d=4985962
Reference
이 문제에 관하여(경쟁 전문 라이브러리 구성 ~ 주사위 ~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/DaikiSuyama/items/fbc55b17c1dee38b61b8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
주사위를 놓을 때 반대쪽에는 오지 않는 2면을 지정하면 주사위를 놓는 방법은 고유하게 결정됩니다. 또한 주사위를 놓는 방법은 위의 면을 고정하고 나서 옆의 면의 경우 나누기를 생각하는 것으로 정해지므로, 모두 24가지 있습니다. 그 24가지를 모두 내보낸 것이 클래스 변수의 state가 됩니다. 즉, 초기화 시점에서 알고 있는 2면의 정보를 주는 것으로 초기화를 할 수 있습니다. 또, 초기화로 주어진 2면을 가지는 주사위가 존재하지 않을 때는 에러 출력을 하도록 하고 있습니다. 그리고 주사위의 초기 위치 좌표로 초기화해야 합니다.
초기화를 할 수 있으면, 나머지는 6 방향의 회전을 실장할 뿐입니다. 이 때, 각각의 Rotate 함수에는 대문자의 알파벳이 말미에 대해 있어 각각 회전 방향을 나타냅니다. 또한 y축의 정방향을 북(North), 부방향을 남쪽(South), x축의 정방향을 동(East), 부방향을 서(West)로 하고 있습니다. 그리고 좌표를 바꾸지 않는 회전 방향은 전면에서 보고 왼쪽 방향(Left), 오른쪽 방향(Right)으로 하고 있습니다. 이 함수 내에서는 주사위의 면을 바꾸는 것과 동시에, 좌표를 바꾸는 4 방향의 회전에 대해서는 좌표의 값도 갱신합니다.
코드
dice.py# coding: UTF-8
import sys
class Dice:
#サイコロの全状態(u,d,f,b,l,rの順)(u+d=f+b=l+r=7が成り立つ)
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をそれぞれ0,1,2,3,4,5としてstate1,state2に指定
#value1,value2はそれぞれstate1,state2に対応する面の目
#nowは初期位置の座標
#適切でない場合はエラー出力
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()
#上から見てy軸の+方向に回転(後面が下面に!)
def RotateN(self):
self.d,self.f,self.u,self.b=self.b,self.d,self.f,self.u
self.now[1]+=1
#上から見てy軸の-方向に回転(前面が下面に!)
def RotateS(self):
self.d,self.f,self.u,self.b=self.f,self.u,self.b,self.d
self.now[1]-=1
#上から見てx軸の+方向に回転(右面が下面に!)
def RotateE(self):
self.d,self.l,self.u,self.r=self.r,self.d,self.l,self.u
self.now[0]+=1
#上から見てx軸の-方向に回転(左面が下面に!)
def RotateW(self):
self.d,self.l,self.u,self.r=self.l,self.u,self.r,self.d
self.now[0]-=1
#前から見て左回転(反時計回り)
def RotateL(self):
self.f,self.l,self.b,self.r=self.r,self.f,self.l,self.b
#前から見て右回転(時計回り)
def RotateR(self):
self.f,self.l,self.b,self.r=self.l,self.b,self.r,self.f
verify한 문제
AOJ Biased Dice
제출 → h tp : // Judge. 우아이즈. 아 c. jp / 온네 네쥬 드게 / 레즈 에에 w. jsp? 리 d=4985962
Reference
이 문제에 관하여(경쟁 전문 라이브러리 구성 ~ 주사위 ~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/DaikiSuyama/items/fbc55b17c1dee38b61b8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
# coding: UTF-8
import sys
class Dice:
#サイコロの全状態(u,d,f,b,l,rの順)(u+d=f+b=l+r=7が成り立つ)
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をそれぞれ0,1,2,3,4,5としてstate1,state2に指定
#value1,value2はそれぞれstate1,state2に対応する面の目
#nowは初期位置の座標
#適切でない場合はエラー出力
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()
#上から見てy軸の+方向に回転(後面が下面に!)
def RotateN(self):
self.d,self.f,self.u,self.b=self.b,self.d,self.f,self.u
self.now[1]+=1
#上から見てy軸の-方向に回転(前面が下面に!)
def RotateS(self):
self.d,self.f,self.u,self.b=self.f,self.u,self.b,self.d
self.now[1]-=1
#上から見てx軸の+方向に回転(右面が下面に!)
def RotateE(self):
self.d,self.l,self.u,self.r=self.r,self.d,self.l,self.u
self.now[0]+=1
#上から見てx軸の-方向に回転(左面が下面に!)
def RotateW(self):
self.d,self.l,self.u,self.r=self.l,self.u,self.r,self.d
self.now[0]-=1
#前から見て左回転(反時計回り)
def RotateL(self):
self.f,self.l,self.b,self.r=self.r,self.f,self.l,self.b
#前から見て右回転(時計回り)
def RotateR(self):
self.f,self.l,self.b,self.r=self.l,self.b,self.r,self.f
AOJ Biased Dice
제출 → h tp : // Judge. 우아이즈. 아 c. jp / 온네 네쥬 드게 / 레즈 에에 w. jsp? 리 d=4985962
Reference
이 문제에 관하여(경쟁 전문 라이브러리 구성 ~ 주사위 ~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/DaikiSuyama/items/fbc55b17c1dee38b61b8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)