2011-06-01 9 views
4

Comment calculer la moyenne de 2 chiffres avec brainfuck?Calcul de la moyenne de 2 chiffres

Je veux dire que j'ai deux chiffres, par exemple 2 3 et sa moyenne est 2.5

pour 2 8 nous avons 5.0

Comment cela peut-il être fait?

+9

J'allais dire que vous devriez montrer le code que vous avez à ce jour pour que nous puissions comprendre ce qui doit fixer, mais je me suis rendu dans ce cas, il est probablement plus facile de écrire la réponse à partir de zéro. – Jeff

+0

J'ai recherché quelques informations sur cette langue, seulement pour découvrir qu'elle porte bien son nom. haha –

+0

@j_syk Cette langue est probablement le * nerdest * jamais inventé (enfin, à l'exclusion de Malbolge). Mais c'est Turing complet, ce qui signifie que vous pouvez implémenter n'importe quel algorithme. Imaginez un framework d'application web basé dessus! ;) – Sorrow

Répondre

2

Quelque chose le long des lignes de:

++>++++++++< this is input data 
[<+>-] this adds the numbers 
<[[->+<][->>+<<]] this does the calculation 

L'approche consiste à répartir une somme de deux nombres. Par distribuer uniformément Je veux dire que la différence entre les valeurs est au plus 1 (puisqu'il n'y a pas de nombres à virgule flottante, vous devez en quelque sorte représenter par exemple 2,5). Une fois que vous avez deux cellules voisines contenant ces valeurs, n'hésitez pas à faire ce que vous voulez avec elles (vous pouvez le sortir, puis diminuer les nombres de chaque cellule et si vous avez 1, alors ".5").

Bien sûr, le code ci-dessus peut avoir des erreurs de pointeur, mais cela devrait suffire pour un démarrage et un débogage. De plus, je serais vraiment heureux de voir une bonne solution efficace.

+0

Cela ne fonctionne pas pour plusieurs raisons. 1. [<+> -] essaie d'incrémenter une cellule à gauche de la cellule initiale - ne quitte pas 2. <[[-> + <][->> + <<]] n'entrera jamais dans la seconde boucle imbriquée ([- >> + < <]) 3. Même si tout 'fonctionnait', il ne serait pas capable de gérer les décimales et par handle je veux dire boucle infinie :(erreur fatale – Zac

1

meilleure solution:

,>,        //input 1 and 2 
>++++++[-<--------<-------->>]<< //decrement both by 48 
[->+<]>>++<      //add them and then put 2 in the third cell(devisor) 
[         // ... 
>[->+>+<<] 
>[-<<- 
[>]>>>[<[>>>-<<<[-]]>>]<<]  //integer division (4/2 = 2, 3/2 = 1...) 
>>>+ 
<<[-<<+>>] 
<<<] 
>[-]>>>>[-<<<<<+>>>>>]   //... 
<<<<++++++[-<++++++++>]<.   //increment 28 and print result 
Questions connexes