Manufactoria에서 빠르게 나누기


10

배경

Manufactoria 는 게임으로 판매되었지만 코드 골퍼는 2 차원 프로그래밍 언어라는 실제 코드를 볼 수 있습니다. Manufactoria 프로그래밍 언어는 일련의 다채로운 마커를 포함하는 단일 대기열을 기반으로합니다 . 지시 포인터는 컨베이어 벨트를 사용하여 게임 보드 주위를 이동하며 대기열에서 읽고 쓰는 일련의 기록기와 분기를 만나게됩니다.

언어는 이해하기 매우 쉬우므로 배우는 가장 빠른 방법은 게임의 처음 몇 단계 (위 링크)를하는 것입니다.

도전

당신의 도전은 최소한의 시간 안에 한 숫자를 다른 숫자로 나눌 수있는 프로그램을 만드는 것입니다.

프로그램에 대한 입력은 X 파란색 마커 문자열과 Y 빨간색 마커가됩니다. 필요한 출력은 길이가 X / Y 인 일련의 빨간색 마커입니다.

사용할 게임 보드는이 공식 컨테스트 레벨에서 찾을 수 있습니다.

http://pleasingfungus.com/Manufactoria/?ctm=Divide_and_Conquer;Input_will_be_X_blues_followed_by_Y_reds,_output_X/Y_reds;bbbbbbrr:rrr|bbbrrr:r|bbbbr:rrrr|r:|bbbbbbbbbb:bbbbbbb:bbbbbbb:bbbbbbbbb rrrrr; 13; 3; 0

13x13 (최대 크기)이며 올바른 테스트가 사전 장착되어 있습니다 (점수 섹션 참조).

채점

프로그램 점수는 프로그램이 공식 컨테스트 수준에서 모든 테스트를 통과하는 데 걸리는 총 시간입니다. 총 시간은 레벨 완료 화면에 표시됩니다.

테스트를 실행하는 동안 결과를 빠르게 받으려면 왼쪽 하단에 50x 가속 슬라이더를 사용해야 할 것입니다 (시간 가속은 점수에 영향을 미치지 않음).

다음은 테스트와 관련된 분류 문제 목록입니다.

 6/2 = 3
 3/3 = 1
 4/1 = 4
 0/1 = 0
12/4 = 3
12/3 = 4
 9/3 = 3
10/2 = 5

예제 I / O

12/3=4
in:  BBBBBBBBBBBBRRR
out: RRRR

10/2=5
in:  BBBBBBBBBBRR
out: RRRRR

9/3=3
in:  BBBBBBBBBRRR
out: RRR

0/1=0
in:  R
out: 

멋진 물건, 그 게임! 요즘 골프에 시간을 내주지 말고 이것을 기억할 것입니다.
tomsmeding

답변:


6

나는 이것을 예측해야했지만 어쨌든 좋은 직업입니다. 게임 엔진으로 8 개 이상의 테스트 사례를 만들 수 있었으면 좋겠습니다. 앞으로 더 많은 Manufactoria 과제를 만들어야합니까?
PhiNotPi 2016 년

1
물론, 나는 그들을 좋아한다.
Keith Randall

4

점수 : 15:51

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

뺄셈을 반복하여 나눕니다. R 중 Y를 사용하여 지금까지 뺀 제수를 추적합니다. G를 사용하여 몫을 계산합니다.

예를 들어 12/4에 대한 각 외부 루프 시작시 상태 (초기 G 기록기 바로 다음)는 다음과 같습니다.

BBBBBBBBBBBB RRRR G
BBBBBBBB RRRR GG
BBBB RRRR GGG
RRRR GGGG

남은 B가 없으면 왼쪽 하단의 가제트는 R을 제거하고 # G-1 R을 출력합니다.

내부 루프는 한 번에 하나의 B를 벗기고 Y를 사용하여 위치를 추적합니다. 외부 루프에서 시작 :

BBBBBBBB RRRR GG
BBBBBBB RYRRR GG
BBBBBB RRYRR GG
BBBBB RRRYR GG
BBBB RRRR GG

내부 루프는 오른쪽 하단의 3x4 상자입니다. 나머지의 레이아웃은 약간 개선 될 수 있지만 내부 루프는 단단합니다.

http://pleasingfungus.com/Manufactoria/?lvl=34&code=c11:13f2;g12:2f3;p12:3f7;c13:3f3;p13:4f3;b12:4f2;r14:4f3;p14:7f7;r13:7f2 ; q14 : 8f7; g13 : 8f2; p14 : 9f4; r13 : 10f2; p14 : 10f7; b15 : 10f0; q14 : 11f7; p15 : 11f3; r16 : 11f1; p15 : 8f0; r15 : 9f1; c16 : 8f0; c13 : 2f0; c15 : 2f0; c16 : 2f0; c17 : 2f0; c11 : 3f3; c11 : 4f3; c11 : 6f3; c11 : 7f3; c11 : 8f3; c11 : 9f3; c11 : 5f3; p11 : 10f7; q11 : 11f6 ; q11 : 12f7; r10 : 12f2; c10 : 10f2; q16 : 10f5; y14 : 6f3; q14 : 5f3; g15 : 5f1; c15 : 4f1; c15 : 3f1; c17 : 9f1; c17 : 8f1; c17 : 7f1; c17 : 6f1; c17 : 5f1; c17 : 4f1; c17 : 3f1; y16 : 9f1; g17 : 10f1; q14 : 2f4; g14 : 1f3; & ctm = Divide_and_Conquer; Input_will_be_X_blues_followed_by_Y_reds, _bb_bbbb : bbb : bbbbb : bbbbb : bbbbb : bbbbb : bbb : rrrr | r : | bbbbbbbbbbbbrrrr : rrr | bbbbbbbbbbbbrrr : rrrr | bbbbbbbbbrrr : rrr | bbbbbbbbbbrr : rrrrr; 13; 3; 0 ;


디자인 부분을 크게 재정렬하여 53 개 부분으로 점수를 13:28로 줄일 수있었습니다.
PhiNotPi

2
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.