Manufactoria의 원시성 테스트


13

배경

Manufactoria 는 프로그래밍에 관한 게임입니다. 플레이어는 2 차원 프로그래밍 언어 형식을 사용하여 작업을 완료해야합니다. 들어 본 적이 없다면 가장 쉬운 방법은 게임의 처음 몇 단계를 시험해 보는 것입니다.

도전

당신의 도전은 숫자의 우선 성을 테스트하는 프로그램을 만드는 것입니다.

입력은 대기열에 일련의 N 파란색 마커가됩니다. N이 소수 인 경우 프로그램에서이를 수락해야합니다 (로봇을 끝까지 이동). N이 복합적이면 프로그램은 거부해야합니다 (어딘가에 바닥에 떨어 뜨림).

제출 옵션

이는 일반적인 Manufactoria 과제보다 복잡한 과제이므로 답변을 제출할 수있는 더 많은 방법을 허용하기로 결정했습니다.

바닐라

제출물을 빌드하고 테스트하기 위해 13x13 사용자 지정 수준을 만들었습니다. 맞춤 테스트 수준은 다음과 같습니다.

13x13 맞춤 수준

이 게임은 커스텀 레벨에서 8 개의 테스트 케이스 만 허용하지만, 이론적으로는 사용 가능한 메모리에 의해서만 제한되는 자연수 N을 처리 할 수 ​​있어야합니다. 정보 제공 목적으로 사용자 지정 수준에서 제공되는 테스트 사례는 다음과 같습니다.

1 -> reject
2 -> accept
4 -> reject
5 -> accept
7 -> accept
9 -> reject
11-> accept
15-> reject

확장 그리드

일부 사용자는 13x13 그리드보다 더 많은 공간을 원할 수 있습니다. 다음은 URL에서 숫자를 변경하여 만든 게임 내 15x15 사용자 지정 수준에 대한 링크입니다.

15x15 맞춤 수준

안타깝게도 추가 셀에 액세스 할 수 없으므로 더 큰 사용자 지정 수준이 작동하지 않습니다.

Manufactoria Esolang

Manufactoria가 ASCII 기반 언어로 채택되었습니다. 창작물을 디자인 / 테스트하는 다른 방법을 원하거나 최종 솔루션을 게임 보드에 맞출 수없는 경우이 esolang을 사용할 수 있습니다. 이 esolang에 대한 정보는 여기에서 찾을 수 있습니다.

Manufactoria esolang

esolang과 실제 게임 사이에는 약간의 차이가 있습니다. 예를 들어 컨베이어 교차점은 다르게 처리됩니다. 이러한 불일치를 이용하지 마십시오.

빠른 테스트 방법

완료하는 데 수천 단계가 필요한 프로그램의 경우 게임 속도가 매우 느립니다. 내 개념 증명 솔루션은 15를 거부하기 위해 28042 단계를 거쳤습니다. 게임 내 50 배의 속도 향상에도 불구하고 너무 오래 걸립니다.

이 유용한 웹 사이트를 찾았습니다 . 답변 링크를 복사하여 붙여 넣기 만하면 특정 입력으로 답변을 테스트 할 수 있습니다. 28042 단계 프로세스는 1 초가 걸렸습니다.

한 가지주의해야 할 점은 컴퓨터가 제대로 작동하더라도 종종 "올바르게 받아 들여지지 않음"과 같은 말을한다는 것입니다. 웹 페이지는 테스트 사례 만 알고 있기 때문입니다. 예를 들어, 내 컴퓨터가 실제로 정확하더라도 내 솔루션이 숫자 3을 "올바르게 받아들이지 않았다"고 말합니다.

이기는 방법

스코어링 기준은 부품 수 (점유 된 셀)입니다. 이것은 코드 골프이므로 가장 적은 부분으로 제출하면 승리합니다.

관심있는 사람들을 위해 벤치 마크 솔루션은 96 개의 부품을 가지고 있으며 13x13 그리드에 적합합니다. 더 나은 알고리즘을 찾는 것은 내가 차선책 알고리즘을 사용한다는 것을 알고 있기 때문에 엄청난 개선으로 이어질 수 있습니다.

답변:


10

53 개 부품-11x11 그리드

방금 2 일 전에 Manufactoria를하는 법을 배웠기 때문에 골프에 최적화 된 것은 아니지만 적어도 문제를 해결합니다. 반복 감산을 통해 시험 분할을 구현합니다. 2에서 N-1까지의 모든 제수를 점검합니다. 시간 복잡도는 O (N ^ 3) 여야합니다.

53 피스 솔루션

솔루션 링크

나는 컨베이어 벨트를 사용해야한다는 것에 매우 실망했습니다. :)

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