Teste de primazia em Manufactoria

13

fundo

Manufactoria é um jogo sobre programação. O jogador deve usar uma forma de linguagem de programação bidimensional para concluir tarefas. Se você nunca ouviu falar, a maneira mais fácil de aprender é experimentar os primeiros níveis do jogo.

Desafio

Seu desafio é criar um programa que teste a primalidade de um número.

A entrada será uma série de N marcadores azuis na fila. Se N for primo, seu programa deve aceitá-lo (mova o robô até o fim). Se N for composto, seu programa deve rejeitá-lo (solte-o no chão em algum lugar).

Opções de envio

Como esse é um desafio mais complexo que o desafio típico de Manufactoria, decidi permitir mais maneiras de enviar suas respostas.

Baunilha

Eu criei um nível personalizado 13x13 para criar e testar envios. O nível de teste personalizado é o seguinte.

Nível personalizado 13x13

O jogo permite apenas 8 casos de teste em um nível personalizado, mas sua criação deve teoricamente ser capaz de lidar com qualquer número natural N, limitado apenas pela memória disponível. Para fins informativos, os casos de teste fornecidos no nível customizado são os seguintes:

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

Grade expandida

Alguns usuários podem querer mais espaço do que uma grade 13x13. Aqui está um link para um nível personalizado de 15x15 no jogo, criado pela alteração de um número no URL:

Nível personalizado 15x15

Infelizmente, níveis personalizados maiores não funcionam, pois as células adicionais são inacessíveis.

The Manufactoria Esolang

Houve uma adaptação do Manufactoria em uma linguagem baseada em ASCII. Se você deseja uma maneira diferente de projetar / testar sua criação, ou se não conseguir ajustar sua solução final ao tabuleiro de jogo, use este esolang. Você pode encontrar informações sobre este esolang aqui:

Manufactoria esolang

Existem algumas discrepâncias entre o esolang e o jogo real. Por exemplo, os cruzamentos do transportador são tratados de maneira diferente. Tente evitar tirar proveito dessas discrepâncias.

Uma maneira mais rápida de testar

O jogo é muito lento quando se trata de programas que levam vários milhares de etapas para serem concluídos. Minha solução de prova de conceito levou 28042 etapas para rejeitar 15. Mesmo na aceleração de 50x no jogo, isso simplesmente leva muito tempo.

Encontrei este site muito útil . Simplesmente copie e cole o link da sua resposta e poderá testá-la com entradas específicas. O processo de 28042 etapas levou menos de um segundo.

Um aspecto a ser observado é que geralmente diz algo como "aceito incorretamente", mesmo que sua máquina funcione corretamente. Isso ocorre porque a página da Web conhece apenas os casos de teste. Por exemplo, diria que minha solução "aceitou incorretamente" o número 3, mesmo que minha máquina estivesse realmente correta.

Como ganhar

O critério de pontuação é o número de partes (células ocupadas). Isso é código de golfe, então a submissão com o menor número de partes vence.

Para os interessados, minha solução de benchmark possui 96 peças e se encaixa na grade 13x13. Encontrar um algoritmo melhor pode levar a melhorias colossais, pois sei que usei um algoritmo abaixo do ideal.

PhiNotPi
fonte

Respostas:

10

53 peças - grade 11x11

Acabei de aprender a jogar Manufactoria há 2 dias, por isso provavelmente não é muito otimizado para golfe, mas pelo menos resolve o problema. Ele implementa a divisão experimental, é claro, por meio de subtração repetida. Todos os divisores de 2 a N-1 são verificados. A complexidade do tempo deve ser O (N ^ 3), acredito.

Solução de 53 peças

Link da solução

Fiquei muito decepcionado por ter que usar uma correia transportadora :)

feersum
fonte