fork download
  1. fillrow = function(N,k,pos=1)
  2. {
  3. assign("count",1,envir=.GlobalEnv)
  4. assign("mat",matrix(rep(0,k*choose(N+k-1,N)),ncol=k),envir=.GlobalEnv)
  5. row = rep(0,k)
  6. return(subfillrow(N,k,pos,row))
  7. }
  8.  
  9. ###
  10.  
  11. subfillrow = function(N,k,pos,row)
  12. {
  13. if (pos == k)
  14. {
  15. row[pos] = N
  16. newmat = mat
  17. newmat[count,] = row
  18. assign("mat",newmat,envir=.GlobalEnv)
  19. assign("count",count+1,envir=.GlobalEnv)
  20. }
  21. else
  22. {
  23. for (i in 0:N)
  24. {
  25. row[pos] = i
  26. subfillrow(N-i,k,pos+1,row)
  27. }
  28. }
  29. if (count == choose(N+k-1,N)+1)
  30. {
  31. return(mat)
  32. }
  33. }
  34.  
  35. ###
  36.  
  37. fillrow(2,4)
Success #stdin #stdout 0.3s 22840KB
stdin
Standard input is empty
stdout
      [,1] [,2] [,3] [,4]
 [1,]    0    0    0    2
 [2,]    0    0    1    1
 [3,]    0    0    2    0
 [4,]    0    1    0    1
 [5,]    0    1    1    0
 [6,]    0    2    0    0
 [7,]    1    0    0    1
 [8,]    1    0    1    0
 [9,]    1    1    0    0
[10,]    2    0    0    0