RosettaCodeData/Task/Pascals-triangle/Mathematica/pascals-triangle-2.math

20 lines
885 B
Plaintext

nmax := 10;
pascal[nmax_] := Module[
{vals = Table[Binomial[n, k], {n, 0, nmax}, {k, 0, n}],
ids = Table[{n, k}, {n, 0, nmax}, {k, 0, n}],
labels, left, right, leftright, edgeLabels
},
labels = Flatten[Thread /@ (Thread[ids -> vals]), 1];
left = DeleteCases[Flatten[Flatten[ids, 1] /. {n_, k_} /; (n >= k + 1) :> {{n, k + 1} -> {n + 1, k + 1}}, 1], _?NumberQ];
right = DeleteCases[Flatten[Flatten[ids, 1] /. {n_, k_} /; (n > k) :> {{n, k} -> {n + 1, k + 1}}, 1], _?NumberQ];
leftright = DeleteCases[left \[Union] right, _ -> {b_, _} /; b > nmax];
edgeLabels = (# -> Style["+", Medium] & /@ leftright);
Graph[Flatten[ids, 1], leftright
, VertexLabels -> MapAt[Placed[#, Center] &, labels, {All, 2}]
, GraphLayout -> "SpringEmbedding"
, VertexSize -> 0.8, EdgeLabels -> edgeLabels
, PlotLabel -> "Pascal's Triangle"
]
];
pascal[nmax]