#pragma once #include #include namespace klotski::cases { struct bidi_t { uint32_t r1; uint32_t r2; }; typedef std::vector BidiRanges; class Ranges : public std::vector { public: /// Spawn klotski-ranges that match the specified block numbers. void spawn(int n, int n_2x1, int n_1x1); /// Derive the legal klotski-ranges with specified head. void derive(int head, Ranges &output) const; }; void derive_demo(const std::vector &range, const std::vector &reversed, std::vector &output, int head); void derive_demo_pro(const BidiRanges &bidi_range, std::vector &output, int head); // TODO: add RangesUnion here // TODO: -> spawn from Ranges / export std::vector } // namespace klotski::cases