5 votes

Comment imprimer des nombres de 1 à 10 en utilisant une boucle dans Brainfuck ? Est-ce même possible ?

Comment imprimer des nombres de 1 à 10 en utilisant une boucle dans Brainfuck ? Est-ce même possible ?
Je cherche une solution à ce problème.

5voto

Swordfish Points 12024
+++++++++++++++++++++++++++++++++++++++++++++++++  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

Version lisible :

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

Sortie :

1
2
3
4
5
6
7
8
9
10

Démonstration en direct :

Brainf**k print 1 à 10
Brainf**k Visualizer

4voto

MilkyWay90 Points 1402

TL;DR

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

Essayez-le en ligne !

FIN TL;DR

Pour programmer dans BrainF**k, faites comme si chaque programme (même les plus simples) devait commencer par une mise en page.

Le pseudo-code pour cela serait quelque chose comme :

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

Cependant, les deux dernières étapes pourraient être simplifiées :

Go back to the digit '9'
Decrement it until '1' and print
Decrement it until '0' and print

Cela permet de gagner beaucoup de temps et octets des personnages.

Pour générer le caractère '0', vous générez le nombre entier 48 (car c'est sa valeur ASCII). Pour ce faire, vous pouvez aller dans Constantes BF des Esolangs . En cherchant le nombre 48, on trouve -[>+<-----]>---

Notre programme jusqu'à présent est -[>+<-----]>--- pour générer 0

Ensuite, déplacez-vous vers la gauche et générez \n (nouvelle ligne). On peut utiliser <++++++++++ . Remarquez qu'il n'y a que des signes plus. C'est parce qu'il n'y a pas beaucoup de place pour réduire le nombre de caractères au chiffre 10.

Notre programme jusqu'à présent est -[>+<-----]>---<++++++++++

Ensuite, déplacez-vous vers la gauche et générez le compteur. Nous voulons que le compteur soit de 10 pour imprimer les nombres de 0 à 9. <++++++++++ .

Notre programme jusqu'à présent est -[>+<-----]>---<++++++++++<++++++++++

Après cela, lancez la boucle [ . Allez au '0'. >> et l'imprimer . et l'incrémenter + aller jusqu'à la nouvelle ligne et imprimer <. Allez au compteur et décrémentez-le, et terminez la boucle quand il est à zéro. <-] . [>>.+<.<-]

Notre programme jusqu'à présent est -[>+<-----]>---<++++++++++<++++++++++[>>.+<.<-]

Enfin, allez au "9". >> décrémente jusqu'à ce qu'il soit égal à 1 et imprime ---------. et le décrémenter jusqu'à ce qu'il soit égal à 0 et imprimer -. . ---------.-.

Le programme est terminé.

0voto

faissaloo Points 194
++++++++++++++++++++++++++++++++++++++++++++++++ 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'

Démonstration en direct

0voto

Capn Doo Points 1

C'est possible. Voici le code : ++++++++++>++++++++++[>+++++<-]>-.<<.>>+.<<.>>+.<<.>>+.<<.>>+.<<.>>+.<<.>>+.<<.>>+.<<.>>+.<<.>>--------.-. Il pourrait être plus court, mais il accomplit toujours la même tâche. Brainf*** peut théoriquement effectuer n'importe quel calcul, puisqu'il est complet de Turing. Ceci est juste un de ces calculs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X