@@ -5,38 +5,41 @@ import std/sugar
55import arraymancer
66import strutils
77
8- proc simplex_grid * (m: int ,
9- n: int ): Tensor [int ] =
10- let L: int = binom (n+ m- 1 , m- 1 )
11- result = newTensor [int ]([L, m])
12- var x = zeros [int ](m)
13- x[m- 1 ] = n
14- for j in 0 .. m- 1 :
8+ proc simplex_grid * (dim: int ,
9+ ndiv: int ): Tensor [int ] =
10+
11+ let L: int = binom (ndiv+ dim- 1 , dim- 1 )
12+ result = newTensor [int ]([L, dim])
13+ var x = zeros [int ](dim)
14+ x[dim- 1 ] = ndiv
15+ for j in 0 .. dim- 1 :
1516 result [0 , j] = x[j]
16- var h = m
17+ var h = dim
1718 for i in 1 .. L- 1 :
1819 h -= 1
1920 let val = x[h]
2021 x[h] = 0
21- x[m - 1 ] = val - 1
22+ x[dim - 1 ] = val - 1
2223 x[h- 1 ] += 1
23- for j in 0 .. m - 1 :
24+ for j in 0 .. dim - 1 :
2425 result [i, j] = x[j]
2526 if val != 1 :
26- h = m
27+ h = dim
2728 return result
2829
29- proc simplex_grid_fractional * (m: int ,
30- n: int ): Tensor [float ] =
31- result = simplex_grid (m, n).asType (float )
32- result = result .map (x => x / float (n))
30+
31+ proc simplex_grid_fractional * (dim: int ,
32+ ndiv: int ): Tensor [float ] =
33+
34+ result = simplex_grid (dim, ndiv).asType (float )
35+ result = result .map (x => x / float (ndiv))
3336 return result
3437
3538
3639echo " Simplex dimensions:"
37- let m = readLine (stdin).parseInt ()
40+ let dim = readLine (stdin).parseInt ()
3841
3942echo " N divisions:"
40- let n = readLine (stdin).parseInt ()
43+ let ndiv = readLine (stdin).parseInt ()
4144
42- echo simplex_grid_fractional (m, n )
45+ echo simplex_grid (dim, ndiv )
0 commit comments