Manufactoria의 모드 7


12

간단한 Manufactoria 도전. 입력 모듈로 7을 계산합니다. 입력은 빅 엔디안 바이너리 (파란색 = 1, 빨간색 = 0)입니다. 출력 형식이 동일해야합니다.

테스트 사례가 제공되었습니다. 가장 작은 부품 수가 이깁니다.

http://pleasingfungus.com/Manufactoria/?ctm=Mod7;Input:_binary_number_big_endian._Output:_that_binary_number_mod_7;bbb:|brrr:b|brrrr:br|bb:bb|bbrrb:brr|brrrrb:brb|bbrb:bbr; 13; 3; 1 ;

(입력 모드 7이 0이면 아무것도 출력하지 않습니다.)


이 경우 "코드 골프"는 "가장 작은 부품"을 의미합니까?
John Dvorak

증분 문제조차 해결하지 못했기 때문에이 문제를 해결하는 방법을 모릅니다. Manufactoria는 재미 있습니다.
Justin

@ JanDvorak : 예.
Keith Randall

@KeithRandall 우리는 manufactoria로 code-golf 를 태그하지 않았습니다 . 여기서 태그를 제거하거나 다른 질문에 추가해야합니다.
Howard

@Howard : 나는 그것을 추가 (또는 가장 빠른 코드 또는 바쁜 비버 또는 코드 도전 또는 점수를 가장 잘 묘사하는 것)를 추가하고 manufactoria 를 간단한 언어 태그 라고 말하고 싶습니다 .
Ilmari Karonen

답변:


5

### Manufactoria, 85 개 부품 배치

이 알고리즘은 매우 간단합니다. 상태 머신 (8 개의 분기가있는 가장 큰 부분-상태 중 하나는 물류 목적으로 복제 됨)을 사용하여 계수를 계산 한 다음 결과를 인코딩하고 수집합니다. 거의 모든 결과에 1 자리 숫자가 포함되므로 추가 압축 단계를 사용하여 부품 수를 줄입니다.

yEd에서 디자인 된 후 Manufactoria로 전사되었습니다.

제 생각에는 너무 많은 컨베이어 벨트를 사용합니다.


5

58 43 부

Manufactoria에서 43 부분 mod7 축소의 스크린 샷

http://pleasingfungus.com/Manufactoria/?lvl=33&code=c16:9f0;q15:9f3;q14:9f3;q13:9f3;c12:9f3;c16:10f1;r15:10f3;r14:10f3;b13:10f3 ; q12 : 10f4; p11 : 10f4; c16 : 11f1; i15 : 11f7; q14 : 11f7; q13 : 11f7; q12 : 11f7; c11 : 11f2; r15 : 12f3; b14 : 12f3; c12 : 12f3; c15 : 13f0; c14 : 13f0; c13 : 13f0; r13 : 12f3; y10 : 3f3; c10 : 4f2; g10 : 5f1; q10 : 6f4; y11 : 3f0; q11 : 4f6; r11 : 5f3; p11 : 6f4; b11 : 7f1; i12 : 4f7 ; c12 : 5f3; q12 : 6f0; g12 : 2f3; c12 : 3f3; p13 : 4f6; y13 : 3f0; c13 : 5f0; c12 : 7f3; b12 : 8f3; & ctm = Mod7; 입력 : _binary_number_big_endian._ 출력 : _that_binary_number_modb : | brrr : b | brrrr : br | bb : bb | bbrrb : brr | brrrrb : brb | bbrb : bbr; 13; 3; 1 ;

입력을 단항으로 변환하는 Keith Randall의 아이디어 는 꽤 좋았으므로 그것을 훔쳤습니다. ;-) 편리하게, 나는 Manufactoria에서 작은 이진-단일 변환기를 최적화하는 데 시간을 보냈 으므로, 그 도전에서 거의 작동하는 솔루션 중 하나를 골라서 그것을 신속하게 최적화 된 mod-7 카운터와 결합했습니다.

이 디자인은 이제 로봇을 위에서 아래로 가져 오는 것이 쓸모없는 여분의 컨베이어를 요구하기 시작했습니다. 추가로 부품을 크게 줄이면 레이아웃을 더 크고 좁게 재 설계 할 수 있습니다.

(* 문제 는 a) 7 × 7 보드에 맞는 디자인과 b) 단항 출력이 빨간색 마커가되어야한다는 점입니다. 위의 기계의 이진-일차 변환기 부분을 살펴보면 하나 또는 두 개의 추가 부품을 사용하면 두 가지 추가 요구 사항을 쉽게 충족시킬 수 있습니다.


이전 58- 파트 버전은 다음과 같습니다.

Manufactoria의 58- 파트 mod 7 감속기 스크린 샷

http://pleasingfungus.com/Manufactoria/?lvl=32&code=g12:2f3;q13:13f5;c14:13f0;c15:12f3;c9:6f2;c9:7f1;c9:8f1;c9:9f1;c10:4f3 ; c10 : 5f3; i10 : 6f5; c10 : 7f2; c10 : 9f0; b11 : 3f2; p11 : 4f1; c11 : 5f1; p11 : 6f2; p11 : 7f2; c11 : 8f3; p11 : 9f3; b11 : 10f2; c12 : 3f2; c12 : 4f2; c12 : 5f0; r12 : 6f3; c12 : 7f3; i12 : 8f1; i12 : 9f5; y12 : 10f3; c13 : 3f2; c13 : 4f3; i13 : 5f1; c13 : 6f3; c13 : 7f2 ; i13 : 8f0; c13 : 9f1; c14 : 3f3; c14 : 4f2; p14 : 5f5; c14 : 6f1; p14 : 7f6; p14 : 8f7; r14 : 9f3; c15 : 4f3; q15 : 5f0; c15 : 6f3; c15 : 7f3; i15 : 8f6; c15 : 9f3; q15 : 10f7; c15 : 11f3; r12 : 12f2; p13 : 12f7; b14 : 12f0; b14 : 11f3; b12 : 11f3; y14 : 10f3; y15 : 13f0; & ctm = Mod7 ; 입력 : _binary_number_big_endian._Output : _that_binary_number_mod_7; bbb : | brrr : b | brrrr : br | bb : bb | bbrrb : brr | brrrrb : brb | bbrb : bbr; 13; 3; 1 ;

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)에 대한 출력 경로를 결합 할 수 있습니다 .


나는 당신의 디자인에 결함이 발견되지 않았습니다. 공간 절약에 좋습니다.
John Dvorak

추신. 다음과 같은 상태 머신 기반 구현에 대한 훌륭한 테스트가 있습니다. 숫자 8890 = BRRRBRBRBBBRBR은 출력에 0을 제공하고 모든 상태를 두 번 방문하고 (끝에 상태 0을 한 번 더) 그리고 가능한 모든 상태 전이를 한 번 수행해야합니다.
Ilmari Karonen


0

나는 실제로 내가하고있는 일을 알지 못했지만 작동하고 승자가 될 수 있습니다 (테스트 사례만으로도 충분할 경우). :디

여기에 이미지 설명을 입력하십시오

편집 : 2 번 최적화, 이제 조금 작습니다 (쓰레기 제거)


실제로 그것이 더 큰 숫자 (또는 테스트 케이스와 다른 숫자)로 작동하는지 모르겠습니다.
Leo Pflug 2018 년

1
-1은 테스트 케이스에서만 작동합니다. 숫자가로 시작 111하면 항상 7로 나눌 수있는 것으로보고됩니다. 이것은 사실이 아닙니다.
John Dvorak
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.