Какой код BrainFuck лучше всего (с точки зрения размера кода) печатать «А» 1000 раз?
Мой подход:
- установить «А» в р [0]
- установите 255 в p [1] для отображения 255 'A', 3 раза
- установите 235 в p [1] для отображения 235 'A'
Это не эффективно, но я не могу найти способ использовать счетчики буксировки одновременно, как умножение
Есть ли лучший подход, чем умножение?
Более общий вопрос: существует ли правило для умножения с большим числом с наименьшим возможным кодом?
+
символов или просто краткость?Ответы:
Метод, который вы используете в данный момент, составляет 39 байт:
>>+++[<-[-<.>]>-]++++[<----->-]<-[-<.>]
(не включая получениеA
) ( попробуйте онлайн! )(3 раза, каждый раз установите счетчик на 255 и напечатайте столько раз, затем вычтите 20, вычтите 1 и напечатайте столько раз)
Тем не менее, намного короче цикл 250 раз и печать 4 раза каждый раз (спасибо jimmy23013 за оптимизацию по сравнению с моим оригинальным решением loop-4 loop-250 print-1):
>------[<....>-]
(16 байт)Если ваши клетки не ограничены (я предполагаю, что они 8-битные, в противном случае вы, вероятно, не стали бы использовать 255 для игры в гольф):
>>++++++++++[<++++++++++[<..........>-]>-]
(42 байта).источник
....
будет короче.47 байт (без потерь)
Я только что сделал это решение в 47 байтов. Я попытался сделать это не так, как обычно, пытаясь сэкономить место, манипулируя счетчиками между двумя значениями. Предполагается, что A предварительно загружен в p [4].
Разъяснения
источник
самый короткий способ получить число 65 для «А» -
>+[+[<]>>+<+]>
это просто добавить HyperNeutrino>------[<....>-]
в конец этого. поэтому полный код становится>+[+[<]>>+<+]>>------[<....>-]
(30 байт)источник
>+[+[<]>>+<+]------[>....<-]