Browse Source

update: mark RawCode param as const ref

master
Dnomd343 2 years ago
parent
commit
85077dc7f7
  1. 6
      src/fast_cal/cal_core.cc
  2. 31
      src/fast_cal/fast_cal.cc
  3. 24
      src/fast_cal/fast_cal.h
  4. 17
      src/main.cc

6
src/fast_cal/cal_core.cc

@ -37,7 +37,7 @@ void FastCal::new_case(uint64_t code, uint64_t mask) {
} }
/// found first matched target /// found first matched target
RawCode FastCal::target(RawCode code, const match_t &match) { RawCode FastCal::target(const RawCode &code, const match_t &match) {
auto core = init((uint64_t)code); auto core = init((uint64_t)code);
/// start bfs search /// start bfs search
while (!cache.empty()) { while (!cache.empty()) {
@ -51,7 +51,7 @@ RawCode FastCal::target(RawCode code, const match_t &match) {
} }
/// found multi-targets matched in first same layer /// found multi-targets matched in first same layer
std::vector<RawCode> FastCal::target_multi(RawCode code, const match_t &match) { std::vector<RawCode> FastCal::target_multi(const RawCode &code, const match_t &match) {
auto core = init((uint64_t)code); auto core = init((uint64_t)code);
auto layer_end = cache.back(); auto layer_end = cache.back();
std::vector<RawCode> matched; // matched list std::vector<RawCode> matched; // matched list
@ -73,7 +73,7 @@ std::vector<RawCode> FastCal::target_multi(RawCode code, const match_t &match) {
} }
/// found all of the furthest cases /// found all of the furthest cases
std::vector<RawCode> FastCal::furthest(RawCode code) { std::vector<RawCode> FastCal::furthest(const RawCode &code) {
auto core = init((uint64_t)code); auto core = init((uint64_t)code);
auto layer_end = cache.back(); auto layer_end = cache.back();
std::vector<RawCode> layer_cases; std::vector<RawCode> layer_cases;

31
src/fast_cal/fast_cal.cc

@ -4,21 +4,29 @@
#include "fast_cal.h" #include "fast_cal.h"
#include "raw_code.h" #include "raw_code.h"
/// klotski resolved -> 2x2 block at address 13 (aka 0xD)
auto resolved = [](uint64_t code) { auto resolved = [](uint64_t code) {
return ((code >> (3 * 0xD)) & 0b111) == B_2x2; // check 2x2 block address return ((code >> (3 * 0xD)) & 0b111) == B_2x2; // check 2x2 block address
}; };
/// klotski resolved -> 2x2 block at address 13 (aka 0xD) RawCode FastCal::solve(const RawCode &code) {
RawCode FastCal::solve(RawCode code) {
return FastCal::target(code, resolved); return FastCal::target(code, resolved);
} }
std::vector<RawCode> FastCal::solve_multi(RawCode code) { std::vector<RawCode> FastCal::solve_multi(const RawCode &code) {
return FastCal::target_multi(code, resolved); return FastCal::target_multi(code, resolved);
} }
std::vector<RawCode> FastCal::resolve(const RawCode &start) {
return FastCal::search(start, resolved);
}
std::vector<std::vector<RawCode>> FastCal::resolve_multi(const RawCode &start) {
return FastCal::search_multi(start, resolved);
}
/// backtrack of FastCal tree /// backtrack of FastCal tree
int FastCal::step_num(RawCode code) { int FastCal::step_num(const RawCode &code) {
auto tmp = cases.find((uint64_t)code); auto tmp = cases.find((uint64_t)code);
if (tmp == cases.end()) { if (tmp == cases.end()) {
return -1; // code not exist return -1; // code not exist
@ -46,15 +54,8 @@ std::vector<RawCode> FastCal::backtrack(const RawCode &code) {
return path; return path;
} }
std::vector<RawCode> FastCal::resolve(RawCode start) { /// static BFS search functions
return FastCal::search(start, resolved); std::vector<std::vector<RawCode>> FastCal::to_furthest(const RawCode &start) {
}
std::vector<std::vector<RawCode>> FastCal::resolve_multi(RawCode start) {
return FastCal::search_multi(start, resolved);
}
std::vector<std::vector<RawCode>> FastCal::to_furthest(RawCode start) {
auto fc = FastCal(); auto fc = FastCal();
std::vector<std::vector<RawCode>> result; std::vector<std::vector<RawCode>> result;
for (const auto &furthest : fc.furthest(start)) { for (const auto &furthest : fc.furthest(start)) {
@ -63,7 +64,7 @@ std::vector<std::vector<RawCode>> FastCal::to_furthest(RawCode start) {
return result; return result;
} }
std::vector<RawCode> FastCal::search(RawCode start, const match_t &match) { std::vector<RawCode> FastCal::search(const RawCode &start, const match_t &match) {
auto fc = FastCal(); auto fc = FastCal();
auto result = fc.target(start, match); auto result = fc.target(start, match);
if (result == FC_NOT_FOUND) { if (result == FC_NOT_FOUND) {
@ -72,7 +73,7 @@ std::vector<RawCode> FastCal::search(RawCode start, const match_t &match) {
return fc.backtrack(result); // backtrack target path return fc.backtrack(result); // backtrack target path
} }
std::vector<std::vector<RawCode>> FastCal::search_multi(RawCode start, const match_t &match) { std::vector<std::vector<RawCode>> FastCal::search_multi(const RawCode &start, const match_t &match) {
auto fc = FastCal(); auto fc = FastCal();
std::vector<std::vector<RawCode>> result; std::vector<std::vector<RawCode>> result;
for (const auto &target : fc.target_multi(start, match)) { for (const auto &target : fc.target_multi(start, match)) {

24
src/fast_cal/fast_cal.h

@ -16,25 +16,23 @@ public:
typedef std::function<bool(uint64_t)> match_t; typedef std::function<bool(uint64_t)> match_t;
/// backtrack functions /// backtrack functions
int step_num(RawCode code); int step_num(const RawCode &code);
std::vector<RawCode> backtrack(const RawCode &code); std::vector<RawCode> backtrack(const RawCode &code);
/// BFS search functions /// BFS search functions
// TODO: build function with void return -> build total tree // TODO: build function with void return -> build total tree
RawCode solve(RawCode code); RawCode solve(const RawCode &code);
std::vector<RawCode> furthest(RawCode code); std::vector<RawCode> furthest(const RawCode &code);
std::vector<RawCode> solve_multi(RawCode code); std::vector<RawCode> solve_multi(const RawCode &code);
RawCode target(RawCode code, const match_t &match); RawCode target(const RawCode &code, const match_t &match);
std::vector<RawCode> target_multi(RawCode code, const match_t &match); std::vector<RawCode> target_multi(const RawCode &code, const match_t &match);
/// static BFS search functions /// static BFS search functions
static std::vector<RawCode> resolve(RawCode start); static std::vector<RawCode> resolve(const RawCode &start);
static std::vector<std::vector<RawCode>> to_furthest(RawCode start); static std::vector<std::vector<RawCode>> to_furthest(const RawCode &start);
static std::vector<std::vector<RawCode>> resolve_multi(RawCode start); static std::vector<std::vector<RawCode>> resolve_multi(const RawCode &start);
static std::vector<RawCode> search(RawCode start, const match_t &match); static std::vector<RawCode> search(const RawCode &start, const match_t &match);
static std::vector<std::vector<RawCode>> search_multi(RawCode start, const match_t &match); static std::vector<std::vector<RawCode>> search_multi(const RawCode &start, const match_t &match);
// TODO: (RawCode code) -> (const RawCode &code)
private: private:
struct fast_cal_t { struct fast_cal_t {

17
src/main.cc

@ -26,7 +26,6 @@ int main() {
// AllCases::build(); // AllCases::build();
// auto f = FastCal(); // auto f = FastCal();
// auto ret = f.solve((uint64_t)RawCode::from_common_code("1a9bf0c"));
// auto ret = f.solve(RawCode::from_common_code("1a9bf0c")); // auto ret = f.solve(RawCode::from_common_code("1a9bf0c"));
// auto ret = f.target(RawCode::from_common_code("1a9bf0c"), [](uint64_t code) { // auto ret = f.target(RawCode::from_common_code("1a9bf0c"), [](uint64_t code) {
@ -45,17 +44,17 @@ int main() {
// std::cout << "step number: " << f.step_num(ret) << std::endl; // std::cout << "step number: " << f.step_num(ret) << std::endl;
// } // }
// for (const auto &c : FastCal::resolve(RawCode::from_common_code("1a9bf0c"))) { for (const auto &c : FastCal::resolve(RawCode::from_common_code("1a9bf0c"))) {
// std::cout << c << std::endl; // std::cout << c << std::endl;
// }
for (const auto &s : FastCal::to_furthest(RawCode::from_common_code("1a9bf0c"))) {
for (const auto &c : s) {
std::cout << c << std::endl;
}
std::cout << "--------------------------------------------" << std::endl;
} }
// for (const auto &s : FastCal::to_furthest(RawCode::from_common_code("1a9bf0c"))) {
// for (const auto &c : s) {
// std::cout << c << std::endl;
// }
// std::cout << "--------------------------------------------" << std::endl;
// }
// std::cout << f.step_num(ret) << std::endl; // std::cout << f.step_num(ret) << std::endl;
// auto f = FastCal(RawCode::from_common_code("1a9bf0c").unwrap()); // auto f = FastCal(RawCode::from_common_code("1a9bf0c").unwrap());

Loading…
Cancel
Save