Создайте список списков (или напечатайте, я не против) Треугольник Паскаля размера N с наименьшими строками кода
Вот моя попытка (118 символов в python 2.6, используя трюк):
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)]
Пояснение:
- первый элемент понимания списка (когда длина равна 0) равна
[1]
- следующие элементы получаются следующим образом:
- возьмите предыдущий список и создайте два списка, один из которых добавлен в начале, а другой в конце.
- например. для второго шага возьмем
[1]
и сделаем[0,1]
и[1,0]
- например. для второго шага возьмем
- суммировать два новых элемента списка по элементу
- например. мы создаем новый список
[(0,1),(1,0)]
и сопоставляем сумму.
- например. мы создаем новый список
- повторите n раз и все.
(с довольно печатной печатью, фактически, из кода-гольфа xD):
result = p(10)
lines = [" ".join(map(str, x)) for x in result]
for i in lines:
print i.center(max(map(len, lines)))
выход:
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