From 8bf3374e4d4e9470d224093f51f0ac05a08016e5 Mon Sep 17 00:00:00 2001 From: Dnomd343 Date: Sat, 14 Jan 2023 00:09:46 +0800 Subject: [PATCH] remove: legacy core code --- include/klotski.h | 38 +++---- src-legacy/main.cc | 256 ++------------------------------------------- 2 files changed, 29 insertions(+), 265 deletions(-) diff --git a/include/klotski.h b/include/klotski.h index 21ea03b..4238978 100644 --- a/include/klotski.h +++ b/include/klotski.h @@ -3,25 +3,25 @@ #include -#define B_space 0x0 -#define B_fill 0x7 -#define B_1x2 0x1 -#define B_2x1 0x2 -#define B_1x1 0x3 -#define B_2x2 0x4 - -#define C_1x1 uint64_t(0x3) -#define C_1x2 uint64_t(0x39) -#define C_2x1 uint64_t(0x7002) -#define C_2x2 uint64_t(0x3F03C) - -#define F_1x1 uint64_t(0x7) -#define F_1x2 uint64_t(0x3F) -#define F_2x1 uint64_t(0x7007) -#define F_2x2 uint64_t(0x3F03F) - -uint64_t compact_code(uint64_t code); -uint64_t extract_code(uint64_t code); +//#define B_space 0x0 +//#define B_fill 0x7 +//#define B_1x2 0x1 +//#define B_2x1 0x2 +//#define B_1x1 0x3 +//#define B_2x2 0x4 + +//#define C_1x1 uint64_t(0x3) +//#define C_1x2 uint64_t(0x39) +//#define C_2x1 uint64_t(0x7002) +//#define C_2x2 uint64_t(0x3F03C) +// +//#define F_1x1 uint64_t(0x7) +//#define F_1x2 uint64_t(0x3F) +//#define F_2x1 uint64_t(0x7007) +//#define F_2x2 uint64_t(0x3F03F) + +//uint64_t compact_code(uint64_t code); +//uint64_t extract_code(uint64_t code); #endif diff --git a/src-legacy/main.cc b/src-legacy/main.cc index d81e1aa..ab1beb1 100644 --- a/src-legacy/main.cc +++ b/src-legacy/main.cc @@ -1,17 +1,17 @@ -#include "case.h" -#include "klotski.h" +//#include "case.h" +//#include "klotski.h" #include #include #include #include #include -#define UP (-12) -#define LEFT (-3) -#define DOWN 12 -#define DOWN_2 24 -#define RIGHT 3 -#define RIGHT_2 6 +//#define UP (-12) +//#define LEFT (-3) +//#define DOWN 12 +//#define DOWN_2 24 +//#define RIGHT 3 +//#define RIGHT_2 6 struct cache { uint64_t code; @@ -30,245 +30,9 @@ struct klotski_info { std::queue cal_cache; std::unordered_map klotski_case; -void graph_output(uint64_t code) { - for (int i = 0; i < 20; ++i) { - switch (code & 0x7) { - case B_1x1: - printf("# "); - break; - case B_1x2: - printf("& "); - break; - case B_2x1: - printf("$ "); - break; - case B_2x2: - printf("@ "); - break; - case B_fill: - printf("* "); - break; - case B_space: - printf(". "); - break; - default: - printf("? "); - } - if ((i & 0x3) == 0x3) { - printf("\n"); - } - code >>= 3; - } -} - - -inline bool move_block_release(uint64_t code, uint64_t filter) { - struct cache *p = move_cache; - for (; p < move_cache + move_cache_num; ++p) { - if (p->code == code) { - return false; - } - } - p->code = code; - p->filter = filter; - ++move_cache_num; - return true; -} - -void move_block_1x1(uint64_t code, int addr, int filter) { - int target_addr; - uint64_t ret_code; - if (filter != UP && addr >= 4 * 3 && !(code >> (target_addr = addr + UP) & F_1x1)) { - ret_code = code & ~(F_1x1 << addr) | C_1x1 << target_addr; - if (move_block_release(ret_code, uint64_t(0x7) << target_addr)) { - move_block_1x1(ret_code, target_addr, DOWN); - } - } - if (filter != DOWN && addr <= 15 * 3 && !(code >> (target_addr = addr + DOWN) & F_1x1)) { - ret_code = code & ~(F_1x1 << addr) | C_1x1 << target_addr; - if (move_block_release(ret_code, uint64_t(0x7) << target_addr)) { - move_block_1x1(ret_code, target_addr, UP); - } - } - if (filter != LEFT && (addr & 0x3) != 0 && !(code >> (target_addr = addr + LEFT) & F_1x1)) { - ret_code = code & ~(F_1x1 << addr) | C_1x1 << target_addr; - if (move_block_release(ret_code, uint64_t(0x7) << target_addr)) { - move_block_1x1(ret_code, target_addr, RIGHT); - } - } - if (filter != RIGHT && (addr & 0x3) != 1 && !(code >> (target_addr = addr + RIGHT) & F_1x1)) { - ret_code = code & ~(F_1x1 << addr) | C_1x1 << target_addr; - if (move_block_release(ret_code, uint64_t(0x7) << target_addr)) { - move_block_1x1(ret_code, target_addr, LEFT); - } - } -} - -void move_block_1x2(uint64_t code, int addr, int filter) { - int target_addr; - uint64_t ret_code; - if (filter != UP && addr >= 4 * 3 && !(code >> (target_addr = addr + UP) & F_1x2)) { - ret_code = code & ~(F_1x2 << addr) | C_1x2 << target_addr; - if (move_block_release(ret_code, uint64_t(0x7) << target_addr)) { - move_block_1x2(ret_code, target_addr, DOWN); - } - } - if (filter != DOWN && addr <= 14 * 3 && !(code >> (target_addr = addr + DOWN) & F_1x2)) { - ret_code = code & ~(F_1x2 << addr) | C_1x2 << target_addr; - if (move_block_release(ret_code, uint64_t(0x7) << target_addr)) { - move_block_1x2(ret_code, target_addr, UP); - } - } - if (filter != LEFT && (addr & 0x3) != 0 && !(code >> (target_addr = addr + LEFT) & F_1x1)) { - ret_code = code & ~(F_1x2 << addr) | C_1x2 << target_addr; - if (move_block_release(ret_code, uint64_t(0x7) << target_addr)) { - move_block_1x2(ret_code, target_addr, RIGHT); - } - } - if (filter != RIGHT && (addr & 0x3) != 2 && !(code >> (addr + RIGHT_2) & F_1x1)) { - ret_code = code & ~(F_1x2 << addr) | C_1x2 << (target_addr = addr + RIGHT); - if (move_block_release(ret_code, uint64_t(0x7) << target_addr)) { - move_block_1x2(ret_code, target_addr, LEFT); - } - } -} - -void move_block_2x1(uint64_t code, int addr, int filter) { - int target_addr; - uint64_t ret_code; - if (filter != UP && addr >= 4 * 3 && !(code >> (target_addr = addr + UP) & F_1x1)) { - ret_code = code & ~(F_2x1 << addr) | C_2x1 << target_addr; - if (move_block_release(ret_code, uint64_t(0x7) << target_addr)) { - move_block_2x1(ret_code, target_addr, DOWN); - } - } - if (filter != DOWN && addr <= 11 * 3 && !(code >> (addr + DOWN_2) & F_1x1)) { - ret_code = code & ~(F_2x1 << addr) | C_2x1 << (target_addr = addr + DOWN); - if (move_block_release(ret_code, uint64_t(0x7) << target_addr)) { - move_block_2x1(ret_code, target_addr, UP); - } - } - if (filter != LEFT && (addr & 0x3) != 0 && !(code >> (target_addr = addr + LEFT) & F_2x1)) { - ret_code = code & ~(F_2x1 << addr) | C_2x1 << target_addr; - if (move_block_release(ret_code, uint64_t(0x7) << target_addr)) { - move_block_2x1(ret_code, target_addr, RIGHT); - } - } - if (filter != RIGHT && (addr & 0x3) != 1 && !(code >> (target_addr = addr + RIGHT) & F_2x1)) { - ret_code = code & ~(F_2x1 << addr) | C_2x1 << target_addr; - if (move_block_release(ret_code, uint64_t(0x7) << target_addr)) { - move_block_2x1(ret_code, target_addr, LEFT); - } - } -} - -void move_block_2x2(uint64_t code, int addr, int filter) { - int target_addr; - uint64_t ret_code; - if (filter != UP && addr >= 4 * 3 && !(code >> (target_addr = addr + UP) & F_1x2)) { - ret_code = code & ~(F_2x2 << addr) | C_2x2 << target_addr; - if (move_block_release(ret_code, uint64_t(0x7) << target_addr)) { - move_block_2x2(ret_code, target_addr, DOWN); - } - } - if (filter != DOWN && addr <= 10 * 3 && !(code >> (addr + DOWN_2) & F_1x2)) { - ret_code = code & ~(F_2x2 << addr) | C_2x2 << (target_addr = addr + DOWN); - if (move_block_release(ret_code, uint64_t(0x7) << target_addr)) { - move_block_2x2(ret_code, target_addr, UP); - } - } - if (filter != LEFT && (addr & 0x3) != 0 && !(code >> (target_addr = addr + LEFT) & F_2x1)) { - ret_code = code & ~(F_2x2 << addr) | C_2x2 << target_addr; - if (move_block_release(ret_code, uint64_t(0x7) << target_addr)) { - move_block_2x2(ret_code, target_addr, RIGHT); - } - } - if (filter != RIGHT && (addr & 0x3) != 2 && !(code >> (addr + RIGHT_2) & F_2x1)) { - ret_code = code & ~(F_2x2 << addr) | C_2x2 << (target_addr = addr + RIGHT); - if (move_block_release(ret_code, uint64_t(0x7) << target_addr)) { - move_block_2x2(ret_code, target_addr, LEFT); - } - } -} - -void add_new_case(klotski_info *src, uint64_t code, uint64_t filter) { - auto existing_case = klotski_case.find(code); - if (existing_case != klotski_case.end()) { - existing_case->second->filter |= filter; - if (existing_case->second->step != src->step) { - existing_case->second->src.push_back(src); - } - return; - } - - auto info = new struct klotski_info; - info->code = code; - info->filter = filter; - info->step = src->step + 1; - info->src.push_back(src); - cal_cache.emplace(info); - klotski_case.emplace(code, info); -} - -void next_step(klotski_info *klotski) { - move_cache->code = klotski->code; - uint64_t range = move_cache->code & ~klotski->filter; - for (int addr = 0; range; range >>= 3, addr += 3) { - move_cache_num = 1; - switch (range & 0x7) { - case B_2x2: - move_block_2x2(move_cache->code, addr, 0); - break; - case B_2x1: - move_block_2x1(move_cache->code, addr, 0); - break; - case B_1x2: - move_block_1x2(move_cache->code, addr, 0); - break; - case B_1x1: - move_block_1x1(move_cache->code, addr, 0); - break; - default: - continue; - } - for (struct cache *p = move_cache + 1; p < move_cache + move_cache_num; ++p) { - add_new_case(klotski, p->code, p->filter); - } - } -} - -void cal_klotski(uint64_t code) { - - auto setup = new klotski_info; - setup->step = 0; - setup->code = code; - setup->filter = 0x0; - - klotski_case.clear(); - klotski_case.emplace(code, setup); - - cal_cache.push(setup); - while (!cal_cache.empty()) { - next_step(cal_cache.front()); - cal_cache.pop(); - } - -// printf("count -> %zu\n", klotski_case.size()); - -} - int main() { printf("Klotski engine\n"); - std::vector all_cases; - find_all_case(&all_cases); - -// std::cout << "klotski cases -> " << all_cases.size() << std::endl; - - printf("klotski cases -> %zu\n", all_cases.size()); - - return 0; - // printf("%lx\n", compact_code(0x0E58FC85FFEBC4DB)); // printf("%lx\n", compact_code(0x0603EDF5CAFFF5E2)); @@ -307,9 +71,9 @@ int main() { // uint64_t code = 0x0603EDF5CAFFF5E2; uint64_t code = 0x0E58FC85FFEBC4DB; - for (int i = 0; i < 100; ++i) { +// for (int i = 0; i < 100; ++i) { cal_klotski(code); - } +// } return 0; }