Мы все знаем или, по крайней мере, слышали о брейкфаке , одном из самых известных и влиятельных эзотерических языков. Хотя в настоящее время большинство реализаций используют бесконечную ленту, оригинальный компилятор Урбана Мюллера имел ленту из 30000 ячеек. Малоизвестный факт * заключается в том, что на самом деле в конце ленты есть специальное значение, с которым почти никогда не взаимодействуют в типичной программе «мозговая ебля».
Хотя вы можете напечатать это значение с 29999 >
с и a .
, brainfuck известен своими краткими и лаконичными решениями, поэтому ваша цель - напечатать это значение с минимальным количеством символов.
*фантастика
Правила:
- Обновление инструкций по бреду:
+
/-
: Увеличивать / уменьшать текущую ячейку, оборачивая от 255 до 0 при увеличении 255 и наоборот<
/>
: Переместить указатель влево / вправо на ленте.
: Печать значения текущей ячейки.[
: Перейти к соответствующему,]
если значение в ячейке равно 0]
: Перейти к соответствующему,[
если значение в ячейке не равно 0
- В этом случае
,
(Get input) ничего не делает, так как оригинальный компилятор оставляет ячейку неизменной в EOF, и эта программа не должна получать никаких входных данных. - Лента изначально заполнена всеми 0, кроме ячейки 30000, которая содержит неизвестное значение
- Указатель начинается в ячейке 1 и должен заканчиваться в ячейке 30000, напечатав ее.
- Ячейки слева от 1 и справа от 30000 имеют неопределенное поведение, поэтому решения не должны посещать эти ячейки.
- Обратите внимание , что значение на 30000
этоможет быть 0, так просто зацикливание , пока вы не нажмете ненулевая клетка не будет работать. - Вы должны напечатать только значение в ячейке 30000
- Самое короткое решение побеждает!
- Tie-breaker - более эффективная программа (выполняется за наименьшее количество шагов), за которой следует самое быстрое время отправки.
Совет: Esolanging Fruit предлагает использовать https://copy.sh/brainfuck для проверки вашего кода. Спецификации соответствуют описанию в этой задаче, и вы можете выбрать abort
опцию, чтобы ваша программа остановилась, если она выходит за пределы.
.
. Я выигрываю.Ответы:
54 байта
119 х 252 = 29988. Прямая вложенная петля.
Я использовал этот инструмент, чтобы убедиться, что указатель останавливается на 29999.
источник
50 байтов
Попробуй здесь!
Первый раздел (
>+[>+[<]>->+]>-<<
) устанавливает ленту какСледующий раздел (
[>>-------[[>]+[<]>-]<<-]
) повторяется 121 раз,1
каждый раз добавляя 249 с к концу ленты. Если вы быстро разберетесь с математикой, вы, возможно, поймете, что результаты 121 * 249 за 301291
с, но на первой итерации есть остаток 110, с которым приходится иметь дело, и только добавляется (110-7
) 1031
с на ленту, то есть всего 299831
с. Финальная лента выглядит так:И финал,
>>>[>]>.
чтобы напечатать значение.Некоторые другие заметные алгоритмы:
источник
81
Это перемещается на 150 клеток 200 раз.
Это намного дольше, чем хотелось бы, и есть серьезное препятствие для игры в гольф:
Я больше не знаю, почему я работаю.
Это изобилует компенсациями для непостоянных людей до такой степени, что некоторые из них могут, вероятно, отменить. Я настолько добавил и удалил различные сегменты, что уже не помню, почему я помещаю определенные вещи туда, где они есть (например, почему первая часть инициализирует ячейки ленты в 199 и 151 вместо 200 и 150?).
Вот моя прокомментированная версия этого чудовища в любом случае, в надежде, что я (или кто-то еще) мог бы найти их полезными:
источник
.
, это поможет?