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는 중요한 부분은 아닌데 만들면 이쁠것 같아서 추가함

시각적으로 보니 진짜 이쁘지 않음?



그래서 내가 에디터 말고 실제로 저 공장을 돌릴 날은 언제 올까?