А вот придумать соответствие номера комбинации (в нашем случае - размещения) его составу - это как раз "трюк".
Я тут подумал,можно обойтись и без "трюка" с помощью функции
forvec. Вот код
Код:
g(v)=my(n=#v,p=prod(k=1,n,#v[k]),u=vector(n,i,[1,#v[i]]),l=[],v1=[]);
forvec(x=u,l=concat(l,x));for(i=0,p-1,v1=concat(v1,[vector(n,j,l[n*i+j])]));
w=vector(p,i,vector(n,j,v[j][v1[i][j]]));return(w)
Пример
Код:
g([[0,1],[1,0],[0,1,2]])
[[0,1,0],[0,1,1],[0,1,2],[0,0,0],[0,0,1],[0,0,2],[1,1,0],[1,1,1],[1,1,2],[1,0,0],[1,0,1],[1,0,2]]