C言語でロト6予想プログラム作成

このエントリーをはてなブックマークに追加
166-
#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-:2009/09/13(日) 13:38:45 ID:/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-:2009/09/13(日) 13:39:50 ID:/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++; }
}