Напишите программу, которая для чисел от 1 до 255 выводит код BF, который будет выдавать заданное число в некотором байте массива плюс символ новой строки.
Например, первые четыре строки вывода могут (и, скорее всего, будут):
+
++
+++
++++
Победитель будет самым маленьким: source code + output
(в байтах).
Разъяснения и исправления :
BF-программы используют оберточные ячейки.
Выходная BF-программа должна заканчиваться единственной ненулевой ячейкой, являющейся ячейкой, содержащей число.
Программы должны выводиться в порядке возрастания.
Вывод программы для 0 не является обязательным.
Отрицательные указатели данных не допускаются.
<
на первый указатель ничего не сделаешь. (оставьте комментарий, если было бы более уместно, чтобы он бросил)
code-challenge
brainfuck
code-generation
каменщик
источник
источник
+>++++++++++.
ли действительная программа для ввода1
?Ответы:
Perl 6 , 224 + 3964 =
58344188 байтПопробуйте онлайн! (может , тайм - аут. Изменение
^27-13
в^25-12
ускорить немного за счет некоторого дополнительного выхода)Выводит самый короткий код в форме
*>[*>*<]>*
, где каждый*
является определенным числом+
s или-
s. Существуют некоторые дополнительные настройки, такие как удаление цикла, если оно не нужно, а также трейлинг->
ы.Насколько я могу судить, результат является наиболее удачным для этого конкретного формата.
Объяснение:
источник
Malbolge , 28 743 байта + 7 166 выходных
Не слишком креативно, не так ли? Я собираюсь поиграть в гольф с этим плохим парнем.
Попробуйте онлайн!
источник
Brainfuck,
777573 + 32894 = 329673296932971байтПопробуйте онлайн!
вывод является самым простым из возможных
объяснение:
источник
Stax , оценка
47514783 (812 байт + 3971)Запустите и отладьте его
Я начал с оптимальных опубликованных программ .
Я использовал некоторое регулярное выражение, чтобы ограничить его самыми короткими программами, которые используют не более двух ячеек. Затем я обрезал любой трейлинг
<
или>
символы. Я думаю, что это возможно консервативный способ гарантировать, что при завершении программы нет посторонних ненулевых ячеек. Затем я запустил его через экспериментальную программу stax, которую я написал, чтобы сгенерировать программы stax для фиксированного вывода типа Колмогорова.Эта программа работает путем многократного применения строковых замен. На каждом шаге он ищет> 1 подстроку длины, которая встречается чаще всего, и заменяет ее неиспользуемым символом.
источник
Древесный уголь ,
707698410 + 3627 =433443254037 байтПопробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Выключите пробел.
Назначьте большую сжатую строку, состоящую из ответов @ JonathanAllen для
-128
...,-15
но с транспонированными знаками+
и-
.Нарисуйте треугольник
+
s со стороны 14, который генерирует правильные результаты от 1 до 14. Курсор остается в нижнем углу, хотя завершающий возврат сжатой строки переместит следующий вывод на следующую строку.Разделите большую строку на возвращаемые символы и напечатайте каждую подстроку в обратном порядке, получая результаты от 15 до 128.
Переместите строку вверх, чтобы результат для 128 был заменен отрицательным результатом для 128.
Выполните циклическую перестановку строк
+
и-
вернитесь назад, чтобы получить правильные результаты для 128 - 241.Нарисуйте треугольник
-
s на стороне 14, который дает правильные результаты для 242 до 255.источник
Желе , 1224 + 3716 = 4940 байт
Полная программа.
Попробуйте онлайн!
Как?
Практически полностью сжатие токовых лучей на esolang, которые оставляют только один ненулевой, с удаленными конечными движениями ленты. Вероятно, есть способ оценить подмножество программ BF так, чтобы они завершились и дали кратчайшие решения, которые превзошли бы эту наивную программу. Также вполне может быть способ победить это с помощью более умной программы, основанной на шаблонах или факторизации.
источник
SuperMarioLang , 231 + 32894 байта
Попробуйте онлайн!
Это, конечно, может быть лучше, так как результат является самым основным для мозгового хуя, но мне понадобилось целый день, чтобы написать этот ответ (мои трое детей оставляют мне мало свободного времени), и я горжусь, что по крайней мере мне удалось добиться это.
источник
Python 2, 70 + 8428 = 8498
-2 байта благодаря A__!
-20 байт благодаря Джонатану Аллану!
-229 байт путем помещения числа во вторую ячейку
-1000 байт путем переключения с 16 на 9
Попробуйте онлайн!
Выход
источник
Рубин 271 + 5363 = 5634
Попробуйте онлайн!
Преобразует каждое значение в наименьшее основание, которое не содержит
ноль,его начальную цифру в любом другом месте, а затем преобразовывает из этого основания. Значения, превышающие 127, рассчитываются как их обратные значения.Без упаковки, 221 + 5888 = 6109
Используя тот же подход, что и выше, с ячейками без упаковки.
Попробуйте онлайн!
источник
JavaScript (Node.js) , 691 + 3627 = 4318
Использование того же подхода, что и в ответе @ Neil's Charcoal , и, следовательно, также на основе ответа @ JonathanAllan's Jelly .
Попробуйте онлайн!
источник
Неофициальный Бочонок 16 + 32895 = 32911 байт
Базовое решение для языка игры в гольф. Это самое простое, о чем я могу думать.
Попробуйте онлайн!
источник
Рубин 23 + 32895 = 32918 байт
В качестве базовой линии. Это самое простое решение, которое я могу придумать.
источник
0
вероятно, должно быть1
(хотя я спросил, можем ли мы выводить также на ноль)256.times{|n|puts ?+*n}
не то чтобы это имело слишком большое значение ...Сетчатка 0.8.2 , 28 + 16640 = 16668 байт
Попробуйте онлайн! Включает вывод для
0
. Просто выводит, используя+
s до 127 и-
s до 255.источник
Scala , 95 + 16639 = 16734 байта
Попробуйте онлайн!
Простой ответ, который явно не победит. Используется только тот факт, что
-
оператор (уменьшающий байт) возвращается к 255.источник
05AB1E , оценка: 4848 ( исходный код 1219 байт + вывод 3629 байт)
Вывод - это порт ответа от @Neil 's Charcoal , так что не забывайте и его голосовать!
Попробуйте онлайн.
Объяснение:
Посмотрите эту подсказку 05AB1E (раздел Как сжать большие целые числа ), чтобы понять, почему
•тôm...ò´Θ•
это так183...875
.источник