Manufactoria: gere o programa de aceitação mais lento possível


18

Escreva um programa Manufactoria que aceite a fita de entrada vazia. Mas não faça isso rapidamente! Quero dizer, escreva o programa rapidamente, mas não o deixe correr rapidamente. Quanto mais lento o programa, melhor, desde que seja finalizado. O programa de exemplo abaixo leva 3:51 (o "tempo total" relatado pelo simulador).

insira a descrição da imagem aqui

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!; Gere_ o_slowest_possible_accepting_machine;:; 7; 3; 0 ;

Seu programa começa com a fita vazia. Ele deve rabiscar um pouco, mas eventualmente atinge o quadrado de saída. Você pode deixar os dados na fita, se desejar. O programa mais lento do quadro 7x7 Manufactoria vence!

Sua seta direita é sua amiga, acelera o simulador.

Pontos de bônus por travar o simulador!


Portanto, não há requisitos para aceitar / rejeitar entrada além da fita vazia?
Volatilidade

@ Volatilidade: correta.
Keith Randall

Irritantemente, o simulador não relatará o tempo de execução, a menos que a fita esteja vazia no final, pois não corresponde à saída esperada do desafio. (Felizmente, foi fácil para mim para apagar a fita no final sem a necessidade de espaço muito extra.)
breadbox

Respostas:


22

~ 10 23 iterações ~ 10 15 iterações ~ 10 8 iterações

Configuração de 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!; Gere_the_slowest_possible_accepting_machine;:; 7; 3; 0 ;

A máquina é basicamente um odômetro rodando na base três, usando os símbolos vermelho, azul e amarelo para representar os dígitos 0, 1 e 2, respectivamente. O símbolo verde é usado para marcar o final do número. No início, a fita é inicializada com 49 símbolos vermelhos. Isso é feito pelas peças nas três principais linhas da máquina. As quatro linhas inferiores tratam da tarefa de incrementar o número em um loop. Em cada iteração, as duas células ramificadas no lado esquerdo descobrem como aplicar o incremento ao número atual e, em seguida, as células ramificadas no lado direito copiam os dígitos restantes não afetados.

Anteriormente, eu tentei estimar o tempo de execução da máquina, se ela fosse executada até a conclusão, mas nesse nível, faz mais sentido apenas seguir o número de iterações. Grosso modo, leva cerca de um minuto para concluir uma iteração - mas mesmo que demorasse um segundo, isso só diminuiria o tempo de execução em uma única ordem de magnitude.


4
Ok, eu desisto ..
Volatilidade

2
Não desista! Não tenho dúvidas de que isso ainda está arranhando a superfície. Por exemplo, compactar a lógica do odômetro com apenas uma ou duas células permitiria um aumento de ordem de magnitude no tempo de execução.
breadbox


5
Se ajudar, muitas vezes enviei respostas de golfe que estavam muito atrás do líder, apenas porque era uma abordagem diferente. Uma das coisas que adoro neste site é que ele preserva a diversidade de respostas.
breadbox

1
O @SimplyBeautifulArt É possível melhorar um número possível de pares de símbolos (nesse caso, você pode usar 15 de 16 em vez de 3 de 4). Obviamente, você enfrentaria muitas dificuldades com o tamanho pequeno da placa ao tentar implementar isso.
feersum

8

603: 25

Teste online

Eu estava relendo as perguntas de Manufactoria hoje e, de repente, tive uma idéia que atrasaria drasticamente o processo: em vez de ter apenas 50 valores e alterar as cores três vezes, o novo programa faz isso, mas depois disso diminui o número de valores por 1 e passa pela mudança de cor novamente, até que haja uma fita vazia na qual o programa é interrompido.

A fila não armazena mais de 50 valores ao mesmo tempo, então não adianta tentar colocar muitos valores na fita - eles são retirados imediatamente. Como antes, as correias transportadoras visam maximizar o tempo necessário para que a coisa funcione. De fato, houve um mínimo de ajustes para alcançar um tremendo aumento no tempo de execução.

Ainda longe da resposta da caixa de pão .


Interessante o quão semelhantes são as nossas soluções. Nós dois começamos com um multiplicador 9x6 e colocamos o ramo e o grupo x6 no mesmo lugar! O seu é mais elegante - você usou todas as células e terminou com uma fita limpa.
Igby Largeman

5

33:33

Trabalhei nisso por um bom tempo ( Volatilidade colocou a fasquia bastante alta), mas quando cheguei às 33:33, pensei que era uma boa hora para parar.

A estratégia é bem direta: basicamente preencha a fita com uma cor, depois outra e depois outra, e tente sempre atravessar o maior número possível de células entre cada gravação (ou grupo de gravações).

Tenho certeza de que há maneiras de descobrir que podemos ir muito mais longe com isso.

Busy Beaver

Link de nível


+1 Vou ver o que posso fazer para vencê-lo;) (embora eu provavelmente não vai chegar muito longe)
Volatilidade
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.