~ttt/sudoku

2a2f02a3443c86d8e52e28422bb4c4cf9989df93 — Tomasz Kłak 3 years ago 926a088
many small reformats
1 files changed, 19 insertions(+), 18 deletions(-)

M main.cc
M main.cc => main.cc +19 -18
@@ 8,6 8,7 @@
#include <bitset>
#include <boost/optional.hpp>
#include <boost/container/flat_map.hpp>
#include <boost/container/small_vector.hpp>

static constexpr int WIDTH = 9;
using Piece = uint8_t;


@@ 180,13 181,13 @@ struct PieceSet {
    size_t size() const { return data_.count(); }
    void clear() { data_.reset(); }
    template <typename F>
        void forEach(const F& f) const {
            for (size_t i = 1; i < data_.size(); ++i) {
                if (data_[i]) {
                    f(i);
                }
    void forEach(const F& f) const {
        for (size_t i = 1; i < data_.size(); ++i) {
            if (data_[i]) {
                f(i);
            }
        }
    }
    Piece front() const {
        for (size_t i = 1; i != data_.size(); ++i) {
            if (data_[i]) {


@@ 227,7 228,7 @@ struct Field {
    constexpr Field& operator = (const Field&) noexcept = default;
    constexpr Field& operator = (Field&&) noexcept = default;

    Field(const std::initializer_list<Piece>& possible) {
    constexpr Field(const std::initializer_list<Piece>& possible) noexcept {
        clear();
        assert(possible.size() > 1);
        assert(possible_.size() == 0);


@@ 235,16 236,16 @@ struct Field {
    }

    template <typename F>
        void forEach(const F& f) const {
            possible_.forEach(f);
        }
    constexpr void forEach(const F& f) const noexcept {
        possible_.forEach(f);
    }

    void set(const Piece piece) {
    void set(const Piece piece) noexcept {
        assert(piece > 0 && piece <= WIDTH);
        possible_.insert(piece);
    }

    bool unset(const Piece piece) {
    bool unset(const Piece piece) noexcept {
        const bool wasNotUnique = !isUnique();
        const bool changes = possible_.isSet(piece);
        if (changes) {


@@ 255,19 256,19 @@ struct Field {
        return false;
    }

    bool isSet(const Piece piece) const {
    constexpr bool isSet(const Piece piece) const noexcept {
        return possible_.isSet(piece);
    }

    bool isUnique() const {
    bool isUnique() const noexcept {
        return possible_.size() == 1;
    }

    bool isFull() const {
    bool isFull() const noexcept {
        return possible_.size() == WIDTH;
    }

    size_t size() const {
    size_t size() const noexcept {
        return possible_.size();
    }



@@ 276,7 277,7 @@ struct Field {
        return possible_.front();
    }

    Field& operator = (const Piece piece) {
    Field& operator = (const Piece piece) noexcept {
        reset(piece);
        return *this;
    }


@@ 438,7 439,7 @@ struct Board {
        return boost::none;
    }

    std::vector<Board> splitOn(const Pos pos) {
    std::vector<Board> splitOn(const Pos pos) const {
        std::vector<Board> ret;
        const auto& f = get(pos);
        ret.reserve(f.size());


@@ 450,7 451,7 @@ struct Board {
        return ret;
    }

    boost::optional<Pos> findBestGuessPos() {
    boost::optional<Pos> findBestGuessPos() const {
        std::vector<std::pair<size_t, Pos>> guesses;
        guesses.reserve(fields_.size());
        for (size_t i = 0; i != fields_.size(); ++i) {