Быстро делимся в Мануфактуре


10

Фон

Manufactoria была продана как игра, но мы, игроки в код, можем видеть ее таким, какой она есть на самом деле: двумерным языком программирования. Язык программирования Manufactoria основан на единой очереди , которая содержит ряд разноцветных маркеров. Указатель инструкций перемещается по игровому полю с помощью конвейерных лент, и он встречает ряд писателей и ветвей, которые читают и пишут в очередь.

Язык очень прост для понимания, поэтому самый быстрый способ выучить его - это сыграть в первые несколько уровней игры (ссылка выше).

Вызов

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

Входными данными для программы будет строка X синих маркеров, за которыми следуют Y красных маркеров. Требуемым выводом будет строка красных маркеров длиной X / Y.

Используемая игровая доска находится на этом официальном уровне соревнования:

http://pleasingfungus.com/Manufactoria/?ctm=Divide_and_Conquer;Input_will_be_X_blues_followed_by_Y_reds,_output_X/Y_reds;bbbbbbrr:rrr|bbbrrr:r|bbbbr:rrrr|r:|bbbbbbbbbbbbrrrr:rrr|bbbbbbbbbbbbrrr:rrrr|bbbbbbbbbrrr:rrr|bbbbbbbbbbrr: RRRRR; 13; 3; 0

Это 13x13 (максимальный размер), и он предварительно оборудован правильными тестами (см. Раздел «Оценка»).

счет

Оценка вашей программы - это общее количество времени, которое требуется программе, чтобы пройти все тесты на официальном уровне конкурса. Общее время указано на экране завершения уровня.

Во время выполнения тестов вам, скорее всего, придется использовать ползунок ускорения 50x в левом нижнем углу, чтобы быстро получать результаты (ускорение времени не влияет на оценку).

Вот список проблем разделения, которые участвуют в тестах:

 6/2 = 3
 3/3 = 1
 4/1 = 4
 0/1 = 0
12/4 = 3
12/3 = 4
 9/3 = 3
10/2 = 5

Пример ввода / вывода

12/3=4
in:  BBBBBBBBBBBBRRR
out: RRRR

10/2=5
in:  BBBBBBBBBBRR
out: RRRRR

9/3=3
in:  BBBBBBBBBRRR
out: RRR

0/1=0
in:  R
out: 

Классная штука, та игра! Не особо уделял время гольфу в эти дни, но запомню это.
Томсминг

Ответы:


6

Я должен был предсказать это, но в любом случае хорошая работа. Хотелось бы, чтобы игровой движок позволил мне создать более 8 тестовых случаев. Должен ли я создавать больше задач Мануфактуры в будущем?
PhiNotPi

1
Конечно, они мне нравятся.
Кит Рэндалл

4

Счет: 15:51

введите описание изображения здесь

Делает деление путем повторного вычитания. Использует Y среди R, чтобы отследить, сколько делителей мы вычли до сих пор. Использует G для подсчета частного.

Например, состояние в начале каждого внешнего цикла (сразу после начальной записи G) для 12/4:

BBBBBBBBBBBB RRRR G
BBBBBBBB RRRR GG
BBBB RRRR GGG
RRRR GGGG

Когда B не осталось, гаджет внизу слева удаляет Rs, а затем выводит # G-1 Rs.

Внутренний цикл снимает по одному B за раз и использует Y для отслеживания положения. Начиная с внешнего цикла:

BBBBBBBB RRRR GG
BBBBBBB RYRRR GG
BBBBBB RRYRR GG
BBBBB RRRYR GG
BBBB RRRR GG

Внутренняя петля - прямоугольник 3х4 в правом нижнем углу. Расположение остальных, возможно, можно немного улучшить, но внутренняя петля плотная.

http://pleasingfungus.com/Manufactoria/?lvl=34&code=c11:13f2;g12:2f3;p12:3f7;c13:3f3;p13:4f3;b12:4f2;r14:4f3;p14:7f7;r13:7f2 ; Q14: 8f7; G13: 8f2; P14: 9f4; R13: 10f2; P14: 10f7; B15: 10f0; Q14: 11f7; р15: 11f3; r16: 11f1; р15: 8f0; r15: 9F1; С16: 8f0; с13 : 2f0; с15: 2f0; С16: 2f0; с17: 2f0; с11: 3F3; с11: 4F3; с11: 6f3; с11: 7F3; с11: 8f3; с11: 9F3; с11: 5F3; P11: 10f7; Q11: 11f6 ; Q11: 12f7; r10: 12f2; с10: 10f2; Q16: 10f5; Y14: 6f3; Q14: 5F3; G15: 5f1; с15: 4F1; с15: 3F1; с17: 9F1; с17: 8F1; с17: 7F1; с17 : 6F1; с17: 5f1; с17: 4F1; с17: 3F1; Y16: 9F1; G17: 10f1; Q14: 2F4; G14: 1F3; & CTM = Divide_and_Conquer; Input_will_be_X_blues_followed_by_Y_reds, _output_X / Y_reds; bbbbbbrr: ррр | bbbrrr: г | bbbbr : rrrr | r: | bbbbbbbbbbbbrrrr: rrr | bbbbbbbbbbbrrr: rrrr | bbbbbbbbrrr: rrr | bbbbbbbbbbrr: rrrrr; 13; 3; 0 ;


Резко переставив части вашего дизайна, я смог уменьшить счет до 13:28 с 53 частями.
PhiNotPi

2
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.