Мануфактура: создайте самую медленную возможную принимающую программу


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; с10: 7f2; с11: 7f2; с12: 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 побеждает!

Ваша клавиша со стрелкой вправо - ваш друг, она ускоряет симулятор.

Бонусные баллы за сбой симулятора!


Таким образом, нет никаких требований для принятия / отклонения ввода, кроме пустой ленты?
Волатильность

@ Volatlity: правильно.
Кит Рэндалл

Досадно, что симулятор не будет сообщать о времени выполнения, если лента не будет пустой в конце, поскольку она не соответствует ожидаемому результату испытания. (К счастью, мне было легко стереть ленту в конце, не занимая слишком много дополнительного пространства.)
хлебница

Ответы:


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 ; с12: 9F2; с9: 9F2; I11: 9f7; i10: 9f4; с9: 8f3; i10: 8f2; с14: 9f0; с15: 9f0; с15: 8f3; с15: 7F3; с14: 7f2; G12: 7F0; с11 : 7F3; с10: 7f2; Q9: 6f7; r10: 6F1; R9: 5F3; с11: 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 соответственно. Зеленый символ используется для обозначения конца числа. В начале лента инициализируется 49 красными символами. Это делается с помощью деталей в трех верхних рядах машины. Нижние четыре строки обрабатывают задачу увеличения числа в цикле. На каждой итерации две ячейки ветвления слева определяют, как применить приращение к текущему номеру, а затем ячейки ветвления справа копируют оставшиеся незатронутые цифры.

Ранее я пытался оценить время работы машины, было ли ей разрешено работать до завершения, но на этом уровне имеет смысл просто идти по количеству итераций. Грубо говоря, для завершения одной итерации требуется около минуты, но даже если бы она заняла секунду, это уменьшило бы только время выполнения на один порядок.


4
Хорошо, я сдаюсь ..
Волатильность

2
Не сдавайся! Я не сомневаюсь, что это все еще царапает поверхность. Например, сжатие логики одометра только одной или двумя ячейками позволило бы увеличить время выполнения на порядок.
хлебница


5
Если это помогает, я часто представляю ответы по гольфу, которые отставали от лидера, просто потому, что это был другой подход. Что мне нравится в этом сайте, так это то, что он сохраняет разнообразие ответов.
хлебница

1
@SimplyBeautifulArt Можно было бы улучшить, если бы пары символов были цифрами (в этом случае вы могли бы использовать 15 из 16, а не 3 из 4). Конечно, вы столкнетесь с большими трудностями из-за небольшого размера платы, пытаясь реализовать это.
feersum

8

603: 25

Онлайн тест

Сегодня я перечитывал вопросы «Мануфактуры», и вдруг у меня возникла идея, которая резко замедлила бы процесс: вместо того, чтобы просто иметь 50 значений и менять цвета 3 раза, новая программа делает это, но затем после этого она уменьшает количество значений на 1, и снова проходит изменение цвета, пока не появится пустая лента, на которой программа останавливается.

В очереди не будет храниться более 50 значений за один раз, поэтому бесполезно пытаться поместить слишком много значений на ленту - они просто удаляются сразу. Как и прежде, конвейерные ленты стремятся максимизировать время, необходимое для работы вещи. Фактически, было минимальное количество настроек, чтобы достичь огромного увеличения времени выполнения.

Тем не менее, до сих пор нет ответа от хлебницы .


Интересно, насколько похожи наши решения. Мы оба начали с множителя 9x6 и поместили ветку и группу x6 в одно и то же место! Ваш более элегантный - вы использовали каждую клетку и закончили с чистой лентой.
Игби Крупный человек

5

33:33

Работал над этим довольно долго ( волатильность установила планку довольно высоко), но как только я достиг 33:33, я подумал, что сейчас самое время остановиться.

Стратегия довольно тупая: в основном заполняйте ленту одним цветом, потом другим, потом другим, и всегда пытайтесь пройти как можно больше ячеек между каждой записью (или группой записей).

Я уверен, что есть способы найти что мы можем пойти намного дальше с этим.

Занятый бобр

Ссылка уровня


+1 Я посмотрю, что я могу сделать, чтобы победить;) (хотя, вероятно, я не пойду слишком далеко)
Волатильность
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.