Browse Source

feat: solution path backtrack

master
Dnomd343 2 years ago
parent
commit
46d7d7a051
  1. 19
      src/fast_cal.cc

19
src/fast_cal.cc

@ -10,6 +10,7 @@ struct fast_cal_t {
uint64_t code;
uint64_t mask;
// uint32_t step;
fast_cal_t *last;
};
std::queue<fast_cal_t*> cache;
@ -29,8 +30,12 @@ void add_new_case(uint64_t code, uint64_t mask) {
cases[code] = fast_cal_t {
.code = code,
.mask = mask,
.last = cache.front(),
};;
cache.emplace(&cases[code]);
// TODO: try to check head address = 0xD at here
}
uint32_t fast_cal(uint64_t code) {
@ -39,17 +44,20 @@ uint32_t fast_cal(uint64_t code) {
cases.empty();
cache.empty();
cases[code] = fast_cal_t {
.code = code,
.mask = 0,
.last = nullptr,
};
cache.emplace(&cases[code]);
while (!cache.empty()) {
if (((cache.front()->code >> (3 * 0xD)) & 0b111) == B_2x2) {
std::cout << "Resolve" << std::endl;
std::cout << RawCode(cache.front()->code).dump_case() << std::endl;
std::cout << "Resolved" << std::endl;
// std::cout << RawCode(cache.front()->code).dump_case() << std::endl;
break;
}
@ -57,6 +65,13 @@ uint32_t fast_cal(uint64_t code) {
cache.pop();
}
auto solution = cache.front();
while (solution != nullptr) {
std::cout << RawCode(solution->code).dump_case() << std::endl;
solution = solution->last;
}
return cases.size();
}

Loading…
Cancel
Save