#17877

Why Can't Programmers.. Program?

Write a program that prints the numbers from 1 to 100. But for multiples of three print "Fizz" instead of the number and for the multiples of five print "Buzz". For numbers which are multiples of both three and five print "FizzBuzz".

C’est #old mais concernant la question du fizzbuzz… pourquoi ne pas faire tout simplement ça :

#!/bin/bash

for i in {1..100};
do
	if ((i%3 ==0)); then echo -n 'Fizz'; fi
	if ((i%5 ==0)); then echo -n 'Buzz'; fi
	if ((i%3 !=0)) && ((i%5 !=0)); then echo -n $i; fi
	echo;
done

L’idée est qu’au lieu de 4 test :
– si %3
– si %5
– si %3 et %5 (ie : %15)
– si aucun modulo

On considère que si il y a modulo 15, alors les deux premiers tests sont vrais et ça affiche Fizz+Buzz collés. Du coup il suffit juste de 3 tests.

Le résultat est celui attendu (vous pouvez tester ) :

Mais bizarrement, peu de gens y pensent.

On pourrait également passer par une variable, ce qui d’ailleurs réduirait un peu la charge : le script ce-dessus effectue 3, voire 4 tests. Avec une variable, on fait seulement 3 tests, mais on ajoute la variable :

#!/bin/bash

for i in {1..100};
do
	printi=1;
	if ((i%3 ==0)); then echo -n 'Fizz'; printi=0; fi
	if ((i%5 ==0)); then echo -n 'Buzz'; printi=0; fi
	if ((printi==1)); then echo -n $i; fi
	echo;
done

Dans cet exemple on s’en fout : ce n’est pas un test de modulo qui va changer la charge du CPU, mais si le test est autrement plus complexe, on peut vouloir préférer mettre une variable plutôt qu’un test compliqué.

https://blog.codinghorror.com/why-cant-programmers-program/