//solve thread proc int FindSolution() { int num_symbols; char key[4096]; SYMBOL symbol; if(!bMsgLoaded) return 0; if(iSolveType==SOLVE_HOMO) { num_symbols=message.cur_map.GetNumSymbols(); //if best key is blank, set it to empty symbols + extra letters if(!strlen(siSolveInfo.best_key)) message.cur_map.ToKey(siSolveInfo.best_key,szExtraLtr); //key=program map + additional chars of best key message.cur_map.ToKey(key,siSolveInfo.best_key+num_symbols); for(int cur_symbol=0; cur_symbol<num_symbols; cur_symbol++) { message.cur_map.GetSymbol(cur_symbol,&symbol); } hillclimb(message,message.GetCipher(),message.GetLength(),key,false); } StopSolve(); //reset window state StopNotify(); return 0; }
int zkd_main (int scorelimit, int timelimit, const char* ciphertext) { LoadStringMessage(ciphertext); srand(time(0)); /*setup directories*/ StopSolve(); memset(&siSolveInfo,0,sizeof(SOLVEINFO)); siSolveInfo.ioc_weight=siSolveInfo.ent_weight=siSolveInfo.chi_weight=5; siSolveInfo.dioc_weight=0; siSolveInfo.max_tabu=300; siSolveInfo.swaps=5; siSolveInfo.max_tol=40; siSolveInfo.disp_all=DispAll; siSolveInfo.disp_info=DispInfo; sprintf(siSolveInfo.log_name,"/%s","log.txt"); siSolveInfo.optima_tabu=&tabu_list; SetInfo(&siSolveInfo); Reset(); siSolveInfo.time_limit = timelimit; siSolveInfo.score_limit = scorelimit; siSolveInfo.iteration_limit = -1; //language iLang=0; SetLanguage(); //sovle parameters message.SetBlockSize(1); //SetSolveTypeFeatures(); InitKey(); Solve(); return siSolveInfo.best_score; }
int zkd_main_file(int argc, char** argv) { if (argc != 2 && argc != 4) { printf("Usage:\n"); printf("%s filename [(-t | -s | -i) n]\n", argv[0]); printf("-t n limits runtime to n seconds\n"); printf("-s n limits solution score to n\n"); printf("-i n limits solution to n iterations\n"); printf("If no limit options are given, solver will run for 2 minutes\n"); } LoadMessage(argv[1], 0); srand(time(0)); /*setup directories*/ StopSolve(); memset(&siSolveInfo,0,sizeof(SOLVEINFO)); siSolveInfo.ioc_weight=siSolveInfo.ent_weight=siSolveInfo.chi_weight=5; siSolveInfo.dioc_weight=0; siSolveInfo.max_tabu=300; siSolveInfo.swaps=5; siSolveInfo.max_tol=40; siSolveInfo.disp_all=DispAll; siSolveInfo.disp_info=DispInfo; sprintf(siSolveInfo.log_name,"/%s","log.txt"); siSolveInfo.optima_tabu=&tabu_list; SetInfo(&siSolveInfo); Reset(); if (argc == 4) { if (!strcmp(argv[2], "-t")) { siSolveInfo.time_limit = atoi(argv[3]); siSolveInfo.iteration_limit = -1; siSolveInfo.score_limit = -1; } else if (!strcmp(argv[2], "-s")) { siSolveInfo.score_limit = atoi(argv[3]); siSolveInfo.iteration_limit = -1; siSolveInfo.time_limit = -1; } else if (!strcmp(argv[2], "-i")) { siSolveInfo.iteration_limit = atoi(argv[3]); siSolveInfo.time_limit = -1; siSolveInfo.score_limit = -1; } } else if (argc == 2) { siSolveInfo.time_limit = 120; siSolveInfo.iteration_limit = -1; siSolveInfo.score_limit = -1; } //language iLang=0; SetLanguage(); //sovle parameters message.SetBlockSize(1); //SetSolveTypeFeatures(); InitKey(); Solve(); return siSolveInfo.best_score; }