간단한 Manufactoria 도전. 입력 모듈로 7을 계산합니다. 입력은 빅 엔디안 바이너리 (파란색 = 1, 빨간색 = 0)입니다. 출력 형식이 동일해야합니다.
테스트 사례가 제공되었습니다. 가장 작은 부품 수가 이깁니다.
(입력 모드 7이 0이면 아무것도 출력하지 않습니다.)
간단한 Manufactoria 도전. 입력 모듈로 7을 계산합니다. 입력은 빅 엔디안 바이너리 (파란색 = 1, 빨간색 = 0)입니다. 출력 형식이 동일해야합니다.
테스트 사례가 제공되었습니다. 가장 작은 부품 수가 이깁니다.
(입력 모드 7이 0이면 아무것도 출력하지 않습니다.)
답변:
입력을 단항으로 변환하는 Keith Randall의 아이디어 는 꽤 좋았으므로 그것을 훔쳤습니다. ;-) 편리하게, 나는 Manufactoria에서 작은 이진-단일 변환기를 최적화하는 데 시간을 보냈 으므로, 그 도전에서 거의 작동하는 솔루션 중 하나를 골라서 그것을 신속하게 최적화 된 mod-7 카운터와 결합했습니다.
이 디자인은 이제 로봇을 위에서 아래로 가져 오는 것이 쓸모없는 여분의 컨베이어를 요구하기 시작했습니다. 추가로 부품을 크게 줄이면 레이아웃을 더 크고 좁게 재 설계 할 수 있습니다.
(* 문제 는 a) 7 × 7 보드에 맞는 디자인과 b) 단항 출력이 빨간색 마커가되어야한다는 점입니다. 위의 기계의 이진-일차 변환기 부분을 살펴보면 하나 또는 두 개의 추가 부품을 사용하면 두 가지 추가 요구 사항을 쉽게 충족시킬 수 있습니다.
이전 58- 파트 버전은 다음과 같습니다.
Jan Dvorak의 솔루션 과 마찬가지로 이것은 7- 상태 FSM을 기반으로합니다. 스크린 샷에서 각 상태에 해당하는 게이트에 레이블을 지정하여 쉽게 읽을 수 있도록했습니다. 그러나 상태 머신 자체는 정말 쉬운 부분입니다. 까다로운 부분은 최소한의 게이트로 최종 출력을 생성하는 것입니다.
내가 유용하다고 생각한 한 가지 트릭은 노란색 마커 앞에 쓰여진 모든 것을 배럴로 이동시키는 마지막 복사 루프였습니다 (녹색 마커를 벗기는 동안).이를 통해 고차 출력 비트의 반복을 다음과 같이 출력을 생성합니다.
0: Y ->
1: BY -> B
2: YBR -> BR
3: YBB -> BB
4: RYBR -> BRR
5: BYBR -> BRB
6: RYBB -> BBR
이를 통해 대부분 출력 2, 4 및 5 (모두 시작 BR
)와 3 및 6 (시작 BB
)에 대한 출력 경로를 결합 할 수 있습니다 .
나는 실제로 내가하고있는 일을 알지 못했지만 작동하고 승자가 될 수 있습니다 (테스트 사례만으로도 충분할 경우). :디
편집 : 2 번 최적화, 이제 조금 작습니다 (쓰레기 제거)
111
하면 항상 7로 나눌 수있는 것으로보고됩니다. 이것은 사실이 아닙니다.