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