mirror of https://github.com/dnomd343/klotski.git
Dnomd343
3 months ago
7 changed files with 74 additions and 53 deletions
@ -0,0 +1,48 @@ |
|||
#pragma once |
|||
|
|||
#include <cstdint> |
|||
|
|||
// ----------------------------------------------------------------------------------------- //
|
|||
|
|||
namespace helper { |
|||
|
|||
struct block_num_t { |
|||
int n_1x1; // 4-bit
|
|||
int n_1x2; // 3-bit
|
|||
int n_2x1; // 3-bit
|
|||
}; |
|||
|
|||
constexpr bool operator==(const block_num_t &lhs, const block_num_t &rhs) { |
|||
return lhs.n_1x1 == rhs.n_1x1 |
|||
&& lhs.n_1x2 == rhs.n_1x2 |
|||
&& lhs.n_2x1 == rhs.n_2x1; |
|||
} |
|||
|
|||
/// Calculate the block number from Range.
|
|||
block_num_t cal_block_num(uint32_t range); |
|||
|
|||
/// Calculate type id value from the block number.
|
|||
uint32_t to_type_id(block_num_t block_num); |
|||
|
|||
/// Calculate the block number value from type id.
|
|||
block_num_t to_block_num(uint32_t type_id); |
|||
|
|||
/// Get all block number combinations without dependencies.
|
|||
const std::vector<block_num_t>& block_nums(); |
|||
|
|||
} // namespace helper
|
|||
|
|||
// ----------------------------------------------------------------------------------------- //
|
|||
|
|||
namespace std { |
|||
|
|||
template <> |
|||
struct std::hash<helper::block_num_t> { |
|||
size_t operator()(const helper::block_num_t val) const noexcept { |
|||
return (val.n_1x1 << 6) ^ (val.n_1x2 << 3) ^ val.n_2x1; |
|||
} |
|||
}; |
|||
|
|||
} // namespace std
|
|||
|
|||
// ----------------------------------------------------------------------------------------- //
|
Loading…
Reference in new issue