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.