32.times{|y|print" "*(32-y),(0..y).map{|x|~y&x>0?" .":" A"}}
Le résultat :
Il suffit de remplacer 32 par le nombre de lignes souhaitées.
Bravo à Brian Mitchell (via DZone Snippets)
n = 32 for y in (0..n-1) do # pour y allant de 0 à n-1 (c-a-d pour chaque l ligne = " "*(n-y) # créer n espaces (puis n-1, puis n-2...) # représente la pente gauche du triangle for x in (0..y) do # pour x allant de 0 à y (c-a-d pour chaque if (~y & x > 0) then # ~y est le complément binaire de y, & le ET binaire # c'est la formule magique du programme ligne = ligne + " " # si (~y & x) > 0 la colonne contient un espace ligne = ligne + " A" # sinon c'est un 'A' end end print ligne # afficher la ligne et passer à la suivante end
D'autres lieux d'amusement : 99 bottles of beer dans 1200 langages de programmation...