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