Example #1
0
//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;
}
Example #2
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;
}
Example #3
0
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;
}