09/09/13 13:37:24 /XnlG8ju
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define P 10000
#define Q 43
#define R 256
void lt6(char *a);
int match(char *a,char *b);
void set0(char *a);
void main(int argc,char *argv[]){
if(argc==3){
char buf[R],*mem,*tab,*p1,*p2;
int i,j,line;
long cnt;
FILE *fp;
srand((unsigned)time(NULL));
mem=malloc(P*Q); tab=malloc(P*Q);
fp=fopen(argv[1],"r");
p1=tab; line=0;
while(fgets(buf,R-1,fp)!=NULL){
set0(p1);
i=0;
while(i<18){
j=10*(buf[i]-48)+buf[i+1]-49;
if(j>=0 && j<Q) *(p1+j)=1; i+=3; }
p1+=Q; line++; }
*p1=-1; fclose(fp);
167:-
09/09/13 13:38:45 /XnlG8ju
/*
A=165613/6096454=1/37
1.5A=1/25 0.6A=1/61
0.95A=1/39 1.05A=1/35
B=(1+222+9990+155400+990675)/6096454=1/5.27
*/
fp=fopen(argv[2],"w");
cnt=0; p1=mem;
while(cnt<P*R){
lt6(p1); p2=mem;
while(p2<p1){
i=match(p1,p2);
if(i>2) break;
p2+=Q; }
if(p1==p2){
p2=tab; i=0;
while(*p2!=-1){
j=match(p1,p2);
if(j>4) break; if(j>2) i++; p2+=Q; }
if(*p2==-1 && i<line/37){
i=j=0;
while(i<Q && j<6){
if(*(p1+i)){
fprintf(fp,"%02d ",i+1); j++; }
i++; }
fprintf(fp,"\n"); p1+=Q; printf("%7ld\r",cnt); }
else cnt++; }
else cnt++; }
fclose(fp); free(mem); free(tab); printf("\n");
}
else printf("l125.c\n");
}
168:-
09/09/13 13:39:50 /XnlG8ju
void lt6(char *a){
int i,j;
set0(a);
i=0;
while(i<6){
j=rand()%Q;
if(*(a+j)==0){
*(a+j)=1; i++; }}
}
int match(char *a,char *b){
int i,j;
i=j=0;
while(i<Q){
if(*(a+i) && *(b+i)) j++; i++; }
return(j);
}
void set0(char *a){
int i;
i=0;
while(i<Q){
*(a+i)=0; i++; }
}
169:-
09/09/13 13:45:32 /XnlG8ju
>>166-168
スレリンク(loto板:369番)
を参照。