Джо - ваш средний разработчик BF. Он собирается проверить изменения своего кода в их хранилище, когда ему позвонит его начальник. «Джо! Машина нового клиента сломана! Интерпретатор brainfuck устанавливает все ячейки в случайные значения перед выполнением программы. Нет времени, чтобы исправить это, ваш код должен будет с этим справиться». Джо не задумывается об этом и собирается написать программу, которая обнулит первый миллион ячеек, когда его начальник снова его прерывает - «... и не думайте об использовании грубой силы, код должен будь как можно меньше. " Теперь ты должен помочь бедному Джо!
Характеристики
- Вы получите действительный код Brainfuck в качестве ввода
- Ваша программа затем модифицирует код так, чтобы он работал на рандомизированном интерпретаторе бредов
- Это означает, что перед выполнением программы ячейки могут быть установлены на любое значение.
- Новая программа должна иметь одинаковое поведение независимо от начальных условий.
- Интерпретатор будет иметь значение максимальной ячейки 255 с переносом и ленту бесконечной длины.
счет
Ваша оценка в 10 раз больше размера компилятора в байтах плюс сумма размеров тестового набора . Очевидно, что выигрывает самый низкий балл. Чтобы смягчить последствия оптимизации тестовых примеров, я оставляю за собой право изменить тестовые примеры, если я что-то подозреваю, и, вероятно, сделаю это до выбора победителя.
Тестовые случаи
(Я получил их со страницы esolangs и этой веб-страницы: http://www.hevanet.com/cristofd/brainfuck/ ). Также спасибо @Sparr за последний контрольный пример.
- Привет мир:
++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
- Обратный вход:
>,[>,]<[.<]
- Полномочия Двух (Бесконечный Поток):
>++++++++++>>+<+[[+++++[>++++++++<-]>.<++++++[>--------<-]+<<]>.>[->[ <++>-[<++>-[<++>-[<++>-[<-------->>[-]++<-[<++>-]]]]]]<[>+<-]+>>]<<]
- Квадраты до 10000:
++++[>+++++<-]>[<+++++>-]+<+[>[>+>+<<-]++>>[<<+>>-]>>>[-]++>[-]+>>>+[[-]++++++>>>]<<<[[<++++++++<++>>-]+<.<[>----<-]<]<<[>>>>>[>>>[-]+++++++++<[>-<-]+++++++++>[-[<->-]+[<<<]]<[>+<-]>]<<-]<<-]
- Поток Фибоначчи:
>++++++++++>+>+[[+++++[>++++++++<-]>.<++++++[>--------<-]+<<<]>.>>[[-]<[>+<-]>>[<<+>+>-]<[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>[-]>+>+<<<-[>+<-]]]]]]]]]]]+>>>]<<<]
- Последовательность ASCII до ввода:
,[.[>+<-]>-]
(для этого требуется изменение количества ячеек в зависимости от ввода)
Ответы:
sed, 46-байтовый компилятор
Я не заметил, что вывод также должен был быть гольфом до написания программы, поэтому я остановлюсь на коротком компиляторе. Кроме того, было слишком много работы, чтобы проверить, поэтому, пожалуйста, сообщите, если он не работает правильно :)
источник
C ++
Размер компилятора: 630 байт (благодаря Zacharý -10 байт)
Размер результата компиляции Hello World: 139
Квадрат меньше 10000: 319
Компилятор:
Рандомизированный интерпретатор Brainfuck:
Некоторые заметки:
источник
pii
наP
и изменив определениеR
наm[p<0?p%30000+30000:p]
и изменив все вызовы / ссылки на них соответственно. Также он модифицировал тестовые случаи. Я не проверял это, но он может сохранить несколько байтов, чтобы определить, что нужно30000
, так как вы используете это так часто.R
наm[p<0?p%S+S:p]
работу?R
должно сэкономить несколько байтов.rs , 33 байта, оценка: 2659
В основном просто порт
sed
ответа.источник