#include #include "Vector.hh" #include "Matrix.hh" #include "lorenz1.hh" #include #include #include static const int MAXNUM = 200000;//max size of breadth first library static char *winners[MAXNUM]; static char *losers[MAXNUM]; static double loserError[MAXNUM]; static int numOfWinners=0; static int numOfLosers=0; static char DIR[100]=" "; void initLorenz2(char *s){ strcpy(DIR, s); } void match2winner(char *s, int& num){ int i; for(i=0; i < numOfWinners; i++) if(isequal(s, winners[i])){ num = i; return; } num = -1; return; } void match2loser(char *s, int& num){ int i; for(i=0; i < numOfLosers; i++) if(isequal(s, losers[i])){ num = i; return; } num = -1; return; } void addASwinnerNOsave(char *s){ int indx = numOfWinners; assert(numOfWinners+1 <= MAXNUM); winners[indx] = (char *)malloc(100*sizeof(char)); strcpy(winners[indx], s); numOfWinners++; } void addASwinner(char *s, Matrix *po, double T, double err){ int indx = numOfWinners; assert(numOfWinners+1 <= MAXNUM); winners[indx] = (char *)malloc(100*sizeof(char)); strcpy(winners[indx], s); numOfWinners++; indx++; saveOrbit(*po, T, err, DIR, indx); } void addASloser(char *s, double err){ int i = numOfLosers; assert(numOfLosers+1<=MAXNUM); losers[i] = (char *)malloc(100*sizeof(char)); strcpy(losers[i], s); loserError[i] = err; numOfLosers++; } void advanceString(char *s){//A=0, B = 1 in lex ordering int len = strlen(s); int i; i = len-1; while((i>=0)&&(s[i]!= 'A')) i--; int j; if(i==-1){ for(j=0; j < len+1; j++) s[j] = 'A'; s[len+1] = '\0'; } else{ s[i] = 'B'; for(j=i+1; j < len; j++) s[j] = 'A'; } } void flipANDmatch2winner(char *s, int& num){ int i; for(i=0; i < numOfWinners; i++) if(isflip(s, winners[i])){ num = i; return; } num = -1; } void flipANDmatch2loser(char *s, int& num){ int i; for(i=0; i < numOfLosers; i++) if(isflip(s, losers[i])){ num = i; return; } num = -1; } void flipPO(Matrix *po){ assert(po->getm()==3); int n = po->getn(); int i; for(i=0; i < n; i++){ (*po)(0,i) *= -1.0; (*po)(1,i) *= -1.0; } } void addASwinner(char *s){//s must be flip of a winner added earlier int indx; flipANDmatch2winner(s, indx); assert((0<=indx)&&(indxgetn(); i++){//this wasn't there!!! (*po)(0,i) *= -1; (*po)(1,i) *= -1; } indx = numOfWinners; winners[indx] = (char *)malloc(100*sizeof(char)); strcpy(winners[indx], s); numOfWinners++; indx++; saveOrbit(*po, T, err, DIR, indx); delete po; } void printWinners(){ if(numOfWinners==0) return; char fname[200]; sprintf(fname, "%sWINNERS", DIR); ofstream ofile(fname); int maxlen = strlen(winners[numOfWinners-1]); int lenCounts[100]; int i; for(i=1; i <= maxlen; i++) lenCounts[i] = 0; for(i=0; i < numOfWinners; i++) lenCounts[strlen(winners[i])]++; for(i=1; i <= maxlen; i++) ofile<<"Number of winners of length "<