fork download
  1. open System
  2.  
  3. let rec value (layer,row,pos) =
  4. if pos = 0 || pos = (row + 1) || row = 0 || row = (layer + 1) then 0
  5. elif layer = 1 then 1
  6. else (value (layer-1,row, pos)) + (value (layer-1,row-1,pos)) + (value (layer-1,row-1,pos-1))
  7.  
  8. let layerValues layer =
  9. [for row in [1..layer] ->
  10. [for pos in [1..row] ->
  11. value (layer,row,pos)]]
  12.  
  13. let rec rowToString = function
  14. | [] -> ""
  15. | hd::tl -> sprintf "%d %s" hd (rowToString tl)
  16.  
  17. let rec layerToString = function
  18. | [] -> ""
  19. | hd::tl -> sprintf "%s\n%s" (rowToString hd) (layerToString tl)
  20.  
  21. Console.ReadLine() |> Int32.Parse |> layerValues |> layerToString |> Console.WriteLine
Success #stdin #stdout 0.28s 12008KB
stdin
14
stdout
1 
13 13 
78 156 78 
286 858 858 286 
715 2860 4290 2860 715 
1287 6435 12870 12870 6435 1287 
1716 10296 25740 34320 25740 10296 1716 
1716 12012 36036 60060 60060 36036 12012 1716 
1287 10296 36036 72072 90090 72072 36036 10296 1287 
715 6435 25740 60060 90090 90090 60060 25740 6435 715 
286 2860 12870 34320 60060 72072 60060 34320 12870 2860 286 
78 858 4290 12870 25740 36036 36036 25740 12870 4290 858 78 
13 156 858 2860 6435 10296 12012 10296 6435 2860 858 156 13 
1 13 78 286 715 1287 1716 1716 1287 715 286 78 13 1