Как напечатать числа от 1 до 10, используя цикл в Brainfuck?Это вообще возможно? - PullRequest
0 голосов
/ 28 ноября 2018

Как напечатать числа от 1 до 10, используя цикл в Brainfuck?Это вообще возможно?Я ищу решение этой проблемы.

Ответы [ 4 ]

0 голосов
/ 11 июля 2019

Это возможно.Вот код: ++++++++++>++++++++++[>+++++<-]>-.<<.>>+.<<.>>+.<<.>>+.<<.>>+.<<.>>+.<<.>>+.<<.>>+.<<.>>+.<<.>>--------.-. Он может быть короче, но все же выполняет ту же задачу.Brainf *** теоретически может выполнить любое вычисление, поскольку оно завершено по Тьюрингу.Это только один из тех расчетов.

0 голосов
/ 23 декабря 2018
++++++++++++++++++++++++++++++++++++++++++++++++ Let address 0 be the digit we want to print, starting with '0'
>++++++++++ Let address 1 be our newline character
>+++++++++ Let address 2 be our counter, starting at 9 
[
  - Decrement the counter
  <<+. Increment the digit we want to print and print it
  >. Print the newline
  > Make sure we're at the counter again before we loop back
]

<< Move back to address 0
--------. Make address 0 '1'
-. Make address 0 '0'

Демонстрационная версия

0 голосов
/ 24 июня 2019

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 и выведите -..---------.-.

Программа завершена.

0 голосов
/ 29 ноября 2018
+++++++++++++++++++++++++++++++++++++++++++++++++  Cell 0 to '1'
>++++++++++  cell 1 to '\n'
>+++++++++  cell 2 to 9 as counter
[  Print numbers 1 to 9
<<  Data pointer to cell 0
.+  Print and increment cell 0
>.  Data pointer to cell 1 and print the newline
>-  Data pointer to cell 2 and decrement counter
]  Loop till counter is 0
+++++++++  Set cell 2 to 9
[  Set cell 0 to '1'
<<-  Data pointer to cell 0 and decrement
>>-  Data pointer to cell 2 and decrement counter
]  Loop till counter is 0
<<.  Data pointer to cell 0 and print '1'
-.   Decrement cell 0 and print '0'
>.   Data pointer to cell 1 and print newline

Версия для чтения:

+++++++++++++++++++++++++++++++++++++++++++++++++>
++++++++++>
+++++++++[<<.+>.>-]
+++++++++[<<->>-]
<<.-.>.

Вывод:

1
2
3
4
5
6
7
8
9
10

Демонстрационная версия:

Brainf ** k print 1 до 10 Brainf ** k Visualizer

...