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.
Réponses
Trop de publicités?+++++++++++++++++++++++++++++++++++++++++++++++++ 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 :
TL;DR
-[>+<-----]>---<++++++++++<++++++++++[>>.+<.<-]>>---------.-.
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é.
++++++++++++++++++++++++++++++++++++++++++++++++ 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'
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.