1 #include "mrilib.h"
2 
3 #define NMAX 48
4 static char * srle[NMAX+1] = {
5      NULL ,
6      NULL ,
7      NULL ,
8      "21" ,
9      "211" ,
10      "311" ,
11      "1113" ,
12      "1123" ,
13      "12113" ,
14      "42111" ,
15      "22114" ,
16      "112133" ,
17      "1221114" ,
18      "5221111" ,
19      "2221115" ,
20      "52221111" ,
21      "225111121" ,
22      "252211121" ,
23      "441112221" ,
24      "4111142212" ,
25      "5113112321" ,
26      "27221111121" ,
27      "51221111233" ,
28      "212121111632" ,
29      "2236111112121" ,
30      "337111121221" ,
31      "21212111116322" ,
32      "34313131211211" ,
33      "34313131211212" ,
34      "212112131313431" ,
35      "551212111113231" ,
36      "7332212211112111" ,
37      "71112111133221221" ,
38      "742112111111122221" ,
39      "842112111111122221" ,
40      "7122122111121111332" ,
41      "3632311131212111211" ,
42      "844211211111122221" ,
43      "8442112111111122221" ,
44      "82121121234321111111" ,
45      "44412112131121313131" ,
46      "343111111222281211211" ,
47      "313131341343112112112" ,
48      "1132432111117212112213" ,
49      "525313113111222111211121" ,
50      "82121121231234321111111" ,
51      "823431231211212211111111" ,
52      "923431231211212211111111" ,
53      "3111111832143212221121121"
54 } ;
55 
56 typedef struct {
57   int num ;
58   int * ss ;
59 } SEQ ;
60 
expand_rle(char * str)61 SEQ * expand_rle( char * str )
62 {
63    SEQ * seq ;
64    int * ss , ii , jj , vv ;
65    char * cpt ;
66 
67    if( str == NULL ) return NULL ;
68    for( ii=0,cpt=str ; *cpt != '\0' ; cpt++ )
69       ii += (*cpt - '0') ;
70 
71    seq = (SEQ *) malloc( sizeof(SEQ) ) ;
72    seq->ss = ss = (int *) malloc( sizeof(int) * ii ) ;
73    seq->num = ii ;
74 
75    for( vv=1,ii=0,cpt=str ; *cpt != '\0' ; cpt++ ){
76       jj = (*cpt - '0') ;
77       for( jj=0 ; jj < (*cpt - '0') ; jj++ ) ss[ii++] = vv ;
78       vv = -vv ;
79    }
80 
81    return seq ;
82 }
83 
main(int argc,char * argv[])84 int main( int argc , char * argv[] )
85 {
86    int ir , ii , num , sum , jj ;
87    SEQ * seq ;
88    int * ss ;
89 
90    if( argc < 2 || strcmp(argv[1],"-help") == 0 ) exit(0) ;
91 
92    ir = strtol( argv[1] , NULL , 10 ) ; if( ir < 3 ) exit(1) ;
93 
94    seq = expand_rle( srle[ir] ) ;
95 
96    printf("num = %d\n",seq->num) ;
97    for( ii=0 ; ii < seq->num ; ii++ )
98       printf(" %d",seq->ss[ii]) ;
99    printf("\n") ;
100 
101    num = seq->num ; ss = seq->ss ;
102    for( ii=0 ; ii < num-1 ; ii++ ){
103       sum = 0 ;
104       for( jj=0 ; jj < num-ii ; jj++ )
105          sum += ss[jj] * ss[jj+ii] ;
106       printf(" %d",sum) ;
107    }
108    printf("\n") ;
109 
110    exit(0) ;
111 }
112