Manufactoria : 가능한 가장 느린 수락 프로그램 생성


18

빈 입력 테이프를 받아 들일 Manufactoria 프로그램을 작성하십시오 . 그러나 빨리하지 마십시오! 내 말은, 프로그램을 빨리 작성하되 빨리 실행 시키지는 마십시오. 프로그램이 느릴수록 결국 종료되는 한 더 좋습니다. 아래 예제 프로그램은 3:51 (시뮬레이터가보고 한 "총 시간")을 사용합니다.

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

http://pleasingfungus.com/Manufactoria/?lvl=36&code=g12:5f3;r9:8f1;p12:9f3;c13:9f0;r11:9f0;r10:9f0;r9:9f1;b11:8f0;b10:8f1 ; r9 : 7f2; c10 : 7f2; c11 : 7f2; c12 : 7f3; q12 : 8f3; y13 : 8f2; y14 : 8f2; y15 : 8f1; y15 : 7f0; y14 : 7f0; y13 : 7f0; g12 : 6f3; & ctm = Slow_Accepter!; Generate_the_slowest_possible_accepting_machine; :; 7; 3; 0 ;

프로그램은 빈 테이프로 시작합니다. 그것은 조금 낙서해야하지만 결국 출력 광장에 도달합니다. 원하는 경우 테이프에 데이터를 남길 수 있습니다. 7x7 Manufactoria 보드에서 가장 느린 프로그램이 승리합니다!

오른쪽 화살표 키는 친구이며 시뮬레이터 속도를 높입니다.

시뮬레이터 충돌에 대한 보너스 포인트!


빈 테이프 이외의 입력을 수락 / 거부 할 필요가 없습니까?
변동성

@Volatility : 맞습니다.
Keith Randall

짜증나게도, 시뮬레이터는 테이프가 챌린지의 예상 출력과 일치하지 않기 때문에 테이프가 비어 있지 않으면 실행 시간을보고하지 않습니다. 운 좋게도 여분의 공간을 많이 필요로하지 않고 테이프를 쉽게 지울 수있었습니다.
breadbox

답변:


22

~ 10 23 회 반복 ~ 10 15 회 반복 ~ 10 8 회 반복

Manufactoria 설정

http://pleasingfungus.com/Manufactoria/?lvl=32&code=g9:7f2;b12:8f2;p13:8f5;p11:8f3;r14:8f0;q11:10f3;q13:7f1;y13:9f1;r10:10f1 ; c12 : 9f2; c9 : 9f2; i11 : 9f7; i10 : 9f4; c9 : 8f3; i10 : 8f2; c14 : 9f0; c15 : 9f0; c15 : 8f3; c15 : 7f3; c14 : 7f2; g12 : 7f0; c11 : 7f3; c10 : 7f2; q9 : 6f7; r10 : 6f1; r9 : 5f3; c11 : 6f0; r10 : 5f2; r11 : 5f1; r9 : 4f3; r10 : 4f0; r11 : 4f0; y12 : 5f2; y13 : 5f2 ; y14 : 5f3; y14 : 6f0; y13 : 6f0; y12 : 6f0; & ctm = Slow_Accepter!; Generate_the_slowest_possible_accepting_machine; :; 7; 3; 0 ;

기계는 기본적으로 빨강, 파랑 및 노랑 기호를 사용하여 숫자 0, 1 및 2를 각각 나타내는 기본 3에서 주행하는 주행 거리계입니다. 녹색 기호는 숫자의 끝을 표시하는 데 사용됩니다. 시작시 테이프는 49 개의 빨간색 기호로 초기화됩니다. 이것은 기계의 맨 위 세 행에있는 부분에 의해 수행됩니다. 맨 아래 4 개의 행은 루프에서 숫자를 증가시키는 작업을 처리합니다. 각 반복에서 왼쪽에있는 두 개의 분기 셀은 현재 숫자에 증분을 적용하는 방법을 알아 낸 다음 오른쪽에있는 분기 셀은 나머지 영향을받지 않는 숫자를 복사합니다.

이전에는 머신의 실행 시간을 추정하려고 시도했지만 실행이 완료 될 수 있었지만이 레벨에서는 반복 횟수만큼 이동하는 것이 더 합리적입니다. 대략적으로 말하면, 한 번의 반복을 완료하는 데 약 1 분이 걸리지 만, 1 초가 걸리더라도 실행 시간을 한 단계 만 줄이면됩니다.


4
좋아, 포기 ..
변동성

2
포기하지 마십시오! 나는 이것이 여전히 표면을 긁는다는 것을 의심의 여지가 없다. 예를 들어, 단지 하나 또는 두 개의 셀에 의해 주행 거리계 로직을 압축하면 실행 시간이 수십 배 증가 할 수 있습니다.
breadbox


5
그것이 도움이된다면, 나는 종종 다른 접근법이기 때문에 리더보다 뒤처진 골프 답변을 제출했습니다. 이 사이트에서 내가 좋아하는 것 중 하나는 응답의 다양성을 유지한다는 것입니다.
breadbox

1
@SimplyBeautifulArt 하나는 기호 쌍을 숫자로하여 향상시킬 수 있습니다 (이 경우 4 개 중 3 개가 아닌 16 개 중 15 개를 사용할 수 있음). 물론 작은 보드 크기로 구현하는 데 많은 어려움이 있습니다.
feersum

8

603 : 25

온라인 테스트

나는 오늘 Manufactoria 질문을 다시 읽고 갑자기 프로세스 속도를 늦출 수있는 아이디어를 얻었습니다 .50 값을 가지지 않고 3 번 색상을 변경하는 대신 새로운 프로그램이 그 일을하지만 그 후에는 프로그램이 중지 될 때 빈 테이프가있을 때까지 값을 1 씩 증가시키고 색상 변경을 다시 수행합니다.

대기열은 한 번에 50 개를 초과하는 값을 저장하지 않으므로 너무 많은 값을 테이프로 푸시하려고 시도하지 않아도됩니다. 이전과 마찬가지로 컨베이어 벨트는 물건을 실행하는 데 걸리는 시간을 최대화하는 것을 목표로합니다. 실제로 런타임을 엄청나게 늘리기 위해 최소한의 조정 만있었습니다.

그래도 여전히 빵 상자의 대답 근처 에는 아무 것도 없습니다 .


솔루션이 얼마나 유사한 지 흥미 롭습니다. 우리는 9x6 곱셈기로 시작했고, 브랜치와 x6 그룹을 같은 곳에 두었습니다! 당신은 더 우아합니다-모든 셀을 사용하고 깨끗한 테이프로 마무리했습니다.
Igby Largeman

5

33:33

이 작업은 꽤 오랫동안 진행되었습니다 ( 변동성 은 막대를 매우 높게 설정) 33:33에 도달하면 중단해야 할 시점이라고 생각했습니다.

전략은 매우 무뚝뚝합니다. 기본적으로 테이프를 한 가지 색으로 채우고 다른 색으로 채우고 각 쓰기 (또는 쓰기 그룹) 사이에서 가능한 한 많은 셀을 통과하려고합니다.

나는 우리가 이것으로 훨씬 더 나아갈 수있는 방법이 있다는 것을 확신합니다.

바쁜 비버

레벨 링크


+1 나는 그것을 이길 무엇을 할 수 있는지 볼 수 있습니다) (아마 너무 멀리 가지 않을거야거야하지만)
변동성
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.