1 #include <iostream>
2 #include <fstream>
3 #include <iomanip>
4 #include <cstdlib>
5 #include <string>
6 #include <sstream>
7 #include <cassert>
8
9 struct R2 {
10 double x,y;
11 };
12
13 typedef int Tab[1000];
14 typedef Tab TTab[100];
15 typedef R2 TR2[1000];
16
17 using namespace std;
18
dump(int l,int * t,ostream & cc=cout)19 int dump(int l,int *t, ostream & cc=cout)
20 {
21 cc.precision(20);
22 cc << " { " ;
23 for (int i=0;i<l;i++) {
24 cc << t[i] << " " << ( i < l-1 ? ',' : '}' );
25 }
26 return 0;
27 }
28
dump2(int l,Tab lx,Tab ly,int k,ostream & cc=cout)29 int dump2(int l,Tab lx,Tab ly,int k, ostream & cc=cout)
30 {
31 cc << " { " ;
32 for (int i=0;i<l;i++) {
33 cc << " \t R2( " << lx[i] << "/" << k << ". , " << ly[i] << "/" << k << ". ) " << ( i < l-1 ? ',' : '}' ) << " \n";
34 }
35 return 0;
36 }
37
dump(int l,int ll,TTab t,ostream & cc=cout)38 int dump(int l,int ll,TTab t, ostream & cc=cout)
39 {
40 cc << " { \n" ;
41 for (int i=0;i<l;i++) {
42 cc << "\t\t";
43 dump(ll, t[i], cc);
44 cc << " " << ( i < l-1 ? ',' : '}' ) << endl;
45 }
46 return 0;
47 }
48
f(int k,int * nn,int * aa,int l0,int l1,int l2)49 int f(int k,int *nn, int * aa, int l0,int l1,int l2)
50 {
51 int L[3]={l0,l1,l2};
52
53 int i=1;
54 for (int j=0;j<k;j++)
55 {
56 i*=(L[nn[j]]-aa[j]);
57 cout << L[nn[j]] << " - " << aa[j] << " = " << (L[nn[j]]-aa[j]) << "; ";
58 }
59 return i;
60 }
main(int argc,const char ** argv)61 int main(int argc,const char ** argv)
62 {
63 if(argc<2) return 1;
64
65 int k=atoi(argv[1]);
66 const char * prefix="";
67 if(argc>2) prefix=argv[2];
68 int i=0;
69 Tab num,num1,cc,ff;
70 Tab il,jl,kl;
71 TR2 Pt;
72 // fonction_i = $\Pi_{j=0,k-1} (\Lambda_{nn[i][j]} - aa[i][j]) $
73 TTab aa,nn;
74
75 ostream * cf = 0;
76 ofstream * ccf=0;
77 if(argc>3) cf = ccf = new ofstream(argv[3]);
78 string s[1000];
79 int e0=2;
80 int e1=e0+k-1;
81 int e2=e1+k-1;
82 int t =e2+k;
83
84 ostringstream si;
85 for (int ii=0;ii<=k;ii++)
86 {
87 int cc=1;
88 ostringstream sj;
89 for (int jj=0;jj+ii<=k;jj++)
90 {
91
92 ostringstream sk;
93
94 for(int kk=0;ii+jj+kk<k;kk++)
95 sk << "*(L2-"<< kk << ")";
96 int kk = k-ii-jj;
97
98 int l;
99 if ( ii==k ) l=0;
100 else if ( jj==k ) l=1;
101 else if ( kk==k ) l=2;
102 else if ( ii==0 ) l=e0+kk;
103 else if ( jj==0 ) l=e1+ii;
104 else if ( kk==0 ) l=e2+jj;
105 else l=t++;
106 num1[l]=100*ii+10*jj+kk;
107 num[l]=i++;
108 il[l]=ii;
109 jl[l]=jj;
110 kl[l]=kk;
111 Pt[l].x= (double) jj/k;
112 Pt[l].y= (double) kk/k;
113
114
115 s[l]=si.str()+sj.str()+sk.str();
116 sj << "*(L1-"<< jj << ")";
117 // l=i-1;
118 {
119 int i=0;
120 for (int j=0;j<ii;j++)
121 aa[l][i]=j,nn[l][i++]=0;
122 for (int j=0;j<jj;j++)
123 aa[l][i]=j,nn[l][i++]=1;
124 for (int j=0;j<kk;j++)
125 aa[l][i]=j,nn[l][i++]=2;
126 assert(i==k);
127 }
128
129 }
130 si << "*(L0-"<< ii << ")";
131 }
132 cout << i << endl;
133 for (int l=0;l<i;l++)
134 {
135 ff[l]=f(k,nn[l],aa[l],il[l],jl[l],kl[l]);
136 cout << il[l] << " " << jl[l] << " " << kl[l] << " : " ;
137 for(int j=0;j<k;j++)
138 cout << "( L_" << nn[l][j]<< " - " << aa[l][j] << " ) ";
139 cout << "/ " << ff[l] << endl;
140 }
141 for (int l=0;l<i;l++)
142 cout << setw(3) << num1[l] << " -> " << num[l] << " " << s[l] << endl;
143 for (int l=0;l<i;l++)
144 cout << num[l] << ", ";
145 cout << endl;
146
147 if(cf ==0) cf = & cout;
148 *cf << prefix <<"nn[" << i << "][" << k << "] = " ;
149 dump(i,k,nn,*cf);
150 *cf << ";\n";
151 *cf << prefix <<"aa[" << i << "][" << k << "] = " ;
152 dump(i,k,aa,*cf);
153 *cf << ";\n";
154 *cf << prefix <<"ff[" << i << "] = " ;
155 dump(i,ff,*cf);
156 *cf << ";\n";
157 *cf << prefix <<"il[" << i << "] = " ;
158 dump(i,il,*cf);
159 *cf << ";\n";
160 *cf << prefix <<"jl[" << i << "] = " ;
161 dump(i,jl,*cf);
162 *cf << ";\n";
163 *cf << prefix <<"kl[" << i << "] = " ;
164 dump(i,kl,*cf);
165 *cf << ";\n";
166 *cf << prefix <<"R2 Pt[" << i << "] = " ;
167 dump2(i,jl,kl,k,*cf);
168 *cf << ";\n";
169
170
171 if(ccf) delete ccf; // close file
172
173 }
174