Générer une liste de listes (ou d'impression, je n'ai pas l'esprit) un le Triangle de Pascal de taille N avec le moins de lignes de code possible!
Voici ma tentative (118 caractères dans la version 2.6 de python à l'aide d'un truc):
c,z,k=locals,[0],'_[1]'
p=lambda n:[len(c()[k])and map(sum,zip(z+c()[k][-1],c()[k][-1]+z))or[1]for _ in range(n)]
Explication:
- le premier élément de la liste de compréhension (lorsque la longueur est de 0) est -
[1]
- la prochaine éléments sont obtenus de la façon suivante:
- prendre la liste précédente et de faire deux listes, un collier avec un 0 au début et l'autre à la fin.
- par exemple, pour la 2ème étape, nous prenons
[1]
et faire[0,1]
et[1,0]
- par exemple, pour la 2ème étape, nous prenons
- somme de deux nouvelles listes élément par élément
- par exemple, nous faisons une nouvelle liste
[(0,1),(1,0)]
et carte avec la fonction sum.
- par exemple, nous faisons une nouvelle liste
- répéter n fois et c'est tout.
d'utilisation (avec jolie impression, en fait de code-golf xD):
result = p(10)
lines = [" ".join(map(str, x)) for x in result]
for i in lines:
print i.center(max(map(len, lines)))
sortie:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1