https://factoriobin.com/post/cPx7npXi
788번의 시행을 통해서
200번의 성공, 269번의 부분성공, 319번의 부분 실패가 나왔다
정답을 맞추기까지 평균 3.9회의 시행횟수가 나올 것으로 예상했었는데 정확함
가동모습
어떤 패턴으로 해석하고 있는지 반짝반짝 빛나게 장식해뒀더니 이쁜듯?
회로 자세히 설명하기는 좀 쉽지 않고 걍 간단하게 개념이나 설명함
일단 이런 상태 다이어그램에서 시작한다
시작부분에서 출발해서 가장 처음으로 12를 검사하고 그 다음부터는 부분정답인지, 실패인지에 따라 다음에 테스트할 값이 정해지게 된다
부분정답이면 왼쪽으로 내려가고 오답이면 오른쪽으로 내려가고 정답이면 다시 시작부분으로 돌아가게 된다
빨간색으로 쓴 숫자는 상태 번호인데
첫번째줄은 1
두번째줄은 2~3
세번째줄은 4~7
네번째줄은 8~15
다섯번째줄은 16~31 중에서 17,20,21,22,24,25,26을 사용하고 있다
번호를 건너뛰는 것이 이상하게 보일 수 있지만 이렇게 번호를 매기면 나중에 사용하기가 편함
이 아래는 위 그림을 표로 나타낸 것이다
state가 0~31까지 나열되어있고 사용되지 않는 칸들도 존재한다
현재 state에 따라서 어떤 큐빗을 테스트 할지 out1, out2가 정해져있고 테스트 결과가 부분성공인지, 실패인지에 따라서 다음 state가 어디로 가야할지를 써놨는데
만약 현재 state가 X였다면 부분성공시 2X로, 실패시 2X+1로 가면 된다
6번에서 부분성공하면 6*2인 12로, 실패하면 6*2+1인 13으로 가는 것이 보이는가?
이진 트리로 나타냈기 때문에 모든 지점에서 다음 스테이트를 손쉽게 계산할 수 있음
map으로 써있는건 state*64+out1*8+out2인데 이건 게임 속에서 LUT를 만들기 위해 사용하는 값이다
156이라는 값을 2진법으로 쓰면
00010011100 인데, 끊어서 다시쓰면
00010, 011, 100 -> 2,3,4 -> 2번 state일때 out1은 3이고 out2는 4이라는 것을 의미함
이렇게 얻는 map 값들은 상수조합기에 기록되어있음
회로구간을 전체적으로 나누면 이렇게 되는데
정답판별기 부분은 양자해석기에서 나온 결과물의 종류가 무엇인지를 판별해서 스테이트머신한테 결과를 알려주는 역할을 함
정답이 나왔으면 I=3을 던지고, 부분정답이 나왔으면 I=1을, 오답이 나왔으면 I=2를 1틱만 던짐
state machine에서는 I가 값이 어떻게 나왔는지 보고 다음 state로 어떻게 넘어갈지를 처리하게 됨
I=0이면 아직 결과가 안나온거니 현재 X state 유지
I=1이면 부분정답이 나온거니 2X로 state 변경
I=2이면 오답이 나온거니 2X+1로 state 변경
I=3이면 정답이 나온거니 state=0으로 초기화
처음에는 state=0으로 시작할텐데 가장 처음에는 저기있는 푸시버튼을 클릭해서 시동을 걸어줘야함
그러면 I=3을 1틱만 방출시키는데 처음에만 시동걸어주면 나중에는 정답 판별하면서 알아서 I=3 생성하니까 그 이후로는 알아서 돌게 되어있음
LUT(lookup table)에서는 현재 state에 따라 어떤 out1,out2를 넣어야 하는지 정보를 추출함
https://gall.dcinside.com/mgallery/board/view/?id=factorio&no=55856
[회로 대회] Lookup table 구현하기 수상식참가자가 그래도 5명은 되지 않을까 기대했지만 3명밖에 없었다고 한다.. 참가해준 사람들의 회로 해설 및 코멘트 진행합니다내 회로도 몇개 들어가있음 작품1https://factoriobin.com/post/49zvgall.dcinside.com작품 5-1 방식을 사용했는데
state<<6 한 값을 이용하여 out = out1*8+out2 의 값을 얻어낸다음
out1 = out>>3
out2 = out & 7 을 통해서 각각 out1, out2를 얻어냄
입력 제어에서는 out1을 먼저 넣고 out2를 그 다음에 넣을수 있도록 제어해줌
일단 먼저 out1에 해당하는 큐빗을 선별투입기가 먹도록 하고
그 선별투입기의 동작상태 또한 펄스로 감시하고 있다가 펄스가 발생하면 그다음에는 out2에 대한 큐빗을 먹도록 하고 그것도 먹으면 더이상 추가로 못 넣게함
이렇게 두번을 넣어주게 되면 성공/부분성공/실패의 결과가 나올거고 그 결과를 이용해서 다음시퀀스를 무한하게 반복함
Deco는 중요한 부분은 아닌데 만들면 이쁠것 같아서 추가함
시각적으로 보니 진짜 이쁘지 않음?
그래서 내가 에디터 말고 실제로 저 공장을 돌릴 날은 언제 올까?
불들어오는거 개이쁘네 ㅋㅋ 첫트는 SR래치 글로벌 Reset신호 고민하다가 꼬여서 리트 했는데
의도치 않은 버그가 계속 튀어 나오니 디버깅 개빡셈ㅋㅋ
멋져
엑셀에 숫자써놓은거랑 다이어그램이랑 배정숫자가 좀 다?른거 같네
엑셀은 16 23 27이고 다이어그램은 17 22 26이고
아 그거 17 22 26쪽이 맞는데 state만 고치고 next state쪽은 안고쳤었네
근데 에러는 어케 처리함 S가 11인데 오답이 뜨면 어캄
S11일때 2,2를 넣으면 무조건 맞거나 부분정답이여야함
그건 아는데 따로 조치를 안 했다는 말이겠네
ㅇㅇ 에러처리까지 만들긴 너무 귀찮음..
실상황도아닌데 에러가날수있는건가?
뭐 만약 에러가 발생할 수 있다고 쳐도 에러가 한번 떳다는 것은 걍 무한 에러 반복으로 뜨면서 계속 무의미한 큐빗 소모가 발생할 수도 있다는 뜻이라서 추가로 아무것도 안하고 그냥 가만히 멈춰있는 지금 상태가 더 나을 것 같음. 플레이어가 문제 원인 확인하고 수동 리셋하면 다시 살아나는 거고
지금은 S11일때 오답이 발생했다면 S23으로 넘어갈가고 S23일때는 배정된 큐빗 정보가 없어서 아무런 큐빗 입력도 안하는 상황이고, 그럼 출력으로 나오는 아이템도 없어서 다음 어떤 스테이트로 안넘어가고 그냥 그대로 멈추도록 되어 있음
와 ㅋㅋㅋㅋㅋㅋ 고맙다 이거써야지
이젠 게임에서 오토마타 짜라고 하는구나 세상에
진짜 회로성애자들을 위한 모드