int main(int argc, char* argv[]) { srand((unsigned) time(0)); Bits bits; //CSolver solver; int num = 100000; int solved = 0; clock_t start, finish; start = clock(); //bits = naive_gen_bits(); for(int i=0; i < num; i++) { //std::cin >> bits; //if(std::cin.eof()) { break; } //if(!csolver_unique_check(&solver, &bits)) { continue; } bits = naive_gen_bits(); //Bits newbits; //newbits = bits; //CSolver solver; bool solving = true; while(solving) { std::vector<SimpleNakedSingle> snss = find_simple_naked_singles(&bits); if(snss.size() > 0) { for(int i=0; i < snss.size(); i++) { snss[i].apply(&bits); } continue; } std::vector<NakedSingle> nss = find_naked_singles(&bits); if(nss.size() > 0) { for(int i=0; i < nss.size(); i++) { nss[i].apply(&bits); } continue; } std::vector<HiddenSingle> hss = find_hidden_singles(&bits); if(hss.size() > 0) { for(int i=0; i < hss.size(); i++) { hss[i].apply(&bits); } continue; } std::vector<NHSubset> nhs = find_nh_subsets(&bits); if(nhs.size() > 0) { for(int i=0; i < nhs.size(); i++) { nhs[i].apply(&bits); } continue; } std::vector<Pointing> points = find_pointings(&bits); if(points.size() > 0) { for(int i=0; i < points.size(); i++) { points[i].apply(&bits); } continue; } std::vector<BoxLine> boxlines = find_boxlines(&bits); if(boxlines.size() > 0) { for(int i=0; i < boxlines.size(); i++) { boxlines[i].apply(&bits); } continue; } std::vector<NFish> nfishes = find_nfishes(&bits); if(nfishes.size() > 0) { for(int i=0; i < nfishes.size(); i++) { nfishes[i].apply(&bits); } continue; } std::vector<SimpleColoring> scs = find_simple_colorings(&bits); if(scs.size() > 0) { for(int i=0; i < scs.size(); i++) { scs[i].apply(&bits); } continue; } std::vector<YWing> ywings = find_ywings(&bits); if(ywings.size() > 0) { for(int i=0; i < ywings.size(); i++) { ywings[i].apply(&bits); } continue; } solving = false; } if(bits.complete()) { solved++; continue; } /* std::cout << bits; */ } finish = clock(); printf("time: %2.5f sec\n",(double)(finish - start)/CLOCKS_PER_SEC); printf("%d problems processed\n", num); printf("%2.5f sec per grid average\n", (double)(finish - start)/((double)(CLOCKS_PER_SEC * num))); printf("%1.5f percent solvable.\n", (double)(solved)/(double)(num)); return 0; }