TL; DR
-[>+<-----]>---<++++++++++<++++++++++[>>.+<.<-]>>---------.-.
Попробуйте онлайн!
END TL; DR
Чтобы программировать на BrainF ** k, представьте, что каждая программа (даже простая) должна начинаться с макета.
Псевдокод для этого будет выглядеть примерно так:
Generate the character '0'
Move left and generate '\n'
Move left and generate the counter (10 numbers in this case)
Loop: Get back to the character '0', print it, increment it to '1', go to the newline, print it, go to the counter, and decrement it. End it when the counter is 0
Generate '1' and print it
Generate '0' and print it
Однако два последних шага можно упростить до:
Go back to the digit '9'
Decrement it until '1' and print
Decrement it until '0' and print
Это экономит много времени и байтов символов.
Чтобы сгенерировать символ «0», вы генерируете целое число 48 (потому что это значение ASCII).Для этого вы можете перейти к BF Constants Esolangs .Найдя число 48, мы находим -[>+<-----]>---
Наша программа на данный момент имеет значение -[>+<-----]>---
для генерации 0
Далее, переместитесь влево и сгенерируйте \n
(новая строка).Мы можем использовать <++++++++++
.Обратите внимание, как это полностью плюс знаки.Это потому, что не так много места для уменьшения количества символов под номером 10.
Наша программа до сих пор - -[>+<-----]>---<++++++++++
Затем переместитесь влево и сгенерируйте счетчик.Мы хотим, чтобы счетчик был 10, чтобы печатать числа от 0 до 9. <++++++++++
.
Наша программа пока что -[>+<-----]>---<++++++++++<++++++++++
После этого запустите цикл [
.Перейдите к '0' >>
, напечатайте его .
, увеличьте его +
, перейдите на новую строку и напечатайте <.
, перейдите к счетчику и уменьшите его, и завершите цикл, когда он равен нулю <-]
.[>>.+<.<-]
До сих пор наша программа была -[>+<-----]>---<++++++++++<++++++++++[>>.+<.<-]
Наконец, перейдите к '9' >>
, уменьшите его до 1 и напечатайте ---------.
, и уменьшите егодо 0 и выведите -.
.---------.-.
Программа завершена.