Skip to content

Commit 86a80f7

Browse files
committed
Solver: Instead of adding the possibility blindly we first check if the
player has any of the cards in that set, and if that is the case we just skip adding the possibility completely. If there are cards that the player doesn't have we just remove them from the possibility.
1 parent edbcd9f commit 86a80f7

2 files changed

Lines changed: 20 additions & 4 deletions

File tree

docs/d1/d19/Solver_8hpp_source.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -189,17 +189,17 @@
189189
<div class="ttc" id="aclassCluedo_1_1CardSet_html"><div class="ttname"><a href="../../da/da3/classCluedo_1_1CardSet.html">Cluedo::CardSet</a></div><div class="ttdoc">A set of cards.</div><div class="ttdef"><b>Definition</b> CardSet.hpp:20</div></div>
190190
<div class="ttc" id="aclassCluedo_1_1Player_html"><div class="ttname"><a href="../../d7/dc6/classCluedo_1_1Player.html">Cluedo::Player</a></div><div class="ttdoc">The player of a game.</div><div class="ttdef"><b>Definition</b> Player.hpp:27</div></div>
191191
<div class="ttc" id="aclassCluedo_1_1Solver_html_a004b1a09abad66110e17f2ada4bf3372"><div class="ttname"><a href="../../dc/d77/classCluedo_1_1Solver.html#a004b1a09abad66110e17f2ada4bf3372">Cluedo::Solver::MAX_PLAYER_COUNT</a></div><div class="ttdeci">static constexpr std::size_t MAX_PLAYER_COUNT</div><div class="ttdoc">The maximum number of players that can play a game.</div><div class="ttdef"><b>Definition</b> Solver.hpp:27</div></div>
192-
<div class="ttc" id="aclassCluedo_1_1Solver_html_a2b07553786bf12a0f30aebaadc626213"><div class="ttname"><a href="../../dc/d77/classCluedo_1_1Solver.html#a2b07553786bf12a0f30aebaadc626213">Cluedo::Solver::find_most_likely_solutions</a></div><div class="ttdeci">std::vector&lt; SolutionProbabilityPair &gt; find_most_likely_solutions() const</div><div class="ttdef"><b>Definition</b> Solver.cpp:233</div></div>
192+
<div class="ttc" id="aclassCluedo_1_1Solver_html_a2b07553786bf12a0f30aebaadc626213"><div class="ttname"><a href="../../dc/d77/classCluedo_1_1Solver.html#a2b07553786bf12a0f30aebaadc626213">Cluedo::Solver::find_most_likely_solutions</a></div><div class="ttdeci">std::vector&lt; SolutionProbabilityPair &gt; find_most_likely_solutions() const</div><div class="ttdef"><b>Definition</b> Solver.cpp:249</div></div>
193193
<div class="ttc" id="aclassCluedo_1_1Solver_html_a56d409ea0669a0a87a3df56933108972"><div class="ttname"><a href="../../dc/d77/classCluedo_1_1Solver.html#a56d409ea0669a0a87a3df56933108972">Cluedo::Solver::player</a></div><div class="ttdeci">Player &amp; player(std::size_t player_index)</div><div class="ttdef"><b>Definition</b> Solver.hpp:55</div></div>
194194
<div class="ttc" id="aclassCluedo_1_1Solver_html_a76592716db3faea6095224f40960994a"><div class="ttname"><a href="../../dc/d77/classCluedo_1_1Solver.html#a76592716db3faea6095224f40960994a">Cluedo::Solver::learn_player_has_any_of_cards</a></div><div class="ttdeci">void learn_player_has_any_of_cards(std::size_t player_index, CardSet const &amp;card_set, bool infer_new_info=true)</div><div class="ttdef"><b>Definition</b> Solver.cpp:51</div></div>
195-
<div class="ttc" id="aclassCluedo_1_1Solver_html_a7d5ee0c1fd9e222365138a3725a0c50c"><div class="ttname"><a href="../../dc/d77/classCluedo_1_1Solver.html#a7d5ee0c1fd9e222365138a3725a0c50c">Cluedo::Solver::are_constraints_satisfied</a></div><div class="ttdeci">bool are_constraints_satisfied() const</div><div class="ttdoc">Checks if the constraints of the game are satisfied.</div><div class="ttdef"><b>Definition</b> Solver.cpp:82</div></div>
195+
<div class="ttc" id="aclassCluedo_1_1Solver_html_a7d5ee0c1fd9e222365138a3725a0c50c"><div class="ttname"><a href="../../dc/d77/classCluedo_1_1Solver.html#a7d5ee0c1fd9e222365138a3725a0c50c">Cluedo::Solver::are_constraints_satisfied</a></div><div class="ttdeci">bool are_constraints_satisfied() const</div><div class="ttdoc">Checks if the constraints of the game are satisfied.</div><div class="ttdef"><b>Definition</b> Solver.cpp:98</div></div>
196196
<div class="ttc" id="aclassCluedo_1_1Solver_html_a956a43056df9b0eb677f9d946ee9cc97"><div class="ttname"><a href="../../dc/d77/classCluedo_1_1Solver.html#a956a43056df9b0eb677f9d946ee9cc97">Cluedo::Solver::SOLUTION_CARD_COUNT</a></div><div class="ttdeci">static constexpr std::size_t SOLUTION_CARD_COUNT</div><div class="ttdoc">The number of cards that make a solution (a suspect, a weapon and a room).</div><div class="ttdef"><b>Definition</b> Solver.hpp:28</div></div>
197197
<div class="ttc" id="aclassCluedo_1_1Solver_html_ab1430a93f2c8233b6adbefa0e9f1e593"><div class="ttname"><a href="../../dc/d77/classCluedo_1_1Solver.html#ab1430a93f2c8233b6adbefa0e9f1e593">Cluedo::Solver::learn_player_card_state</a></div><div class="ttdeci">void learn_player_card_state(std::size_t player_index, Card card, bool has_card, bool infer_new_info=true)</div><div class="ttdef"><b>Definition</b> Solver.cpp:34</div></div>
198198
<div class="ttc" id="aclassCluedo_1_1Solver_html_ab17009ec023f6f7a2a5c609a3cc6fd39"><div class="ttname"><a href="../../dc/d77/classCluedo_1_1Solver.html#ab17009ec023f6f7a2a5c609a3cc6fd39">Cluedo::Solver::MIN_PLAYER_COUNT</a></div><div class="ttdeci">static constexpr std::size_t MIN_PLAYER_COUNT</div><div class="ttdoc">The minimum number of players that can play a game.</div><div class="ttdef"><b>Definition</b> Solver.hpp:26</div></div>
199199
<div class="ttc" id="aclassCluedo_1_1Solver_html_ab734b9b699d5fb610b43faffeec8c0fd"><div class="ttname"><a href="../../dc/d77/classCluedo_1_1Solver.html#ab734b9b699d5fb610b43faffeec8c0fd">Cluedo::Solver::player</a></div><div class="ttdeci">Player const &amp; player(std::size_t player_index) const</div><div class="ttdef"><b>Definition</b> Solver.hpp:49</div></div>
200200
<div class="ttc" id="aclassCluedo_1_1Solver_html_abe20f3609d6220253b8216ce61231c83"><div class="ttname"><a href="../../dc/d77/classCluedo_1_1Solver.html#abe20f3609d6220253b8216ce61231c83">Cluedo::Solver::SolutionProbabilityPair</a></div><div class="ttdeci">std::pair&lt; std::tuple&lt; Card, Card, Card &gt;, float &gt; SolutionProbabilityPair</div><div class="ttdoc">A pair that contains a solution (a suspect, a weapon and a room) and its probability.</div><div class="ttdef"><b>Definition</b> Solver.hpp:96</div></div>
201201
<div class="ttc" id="aclassCluedo_1_1Solver_html_abf95be95975ebf0bc2bc20ef880ed00a"><div class="ttname"><a href="../../dc/d77/classCluedo_1_1Solver.html#abf95be95975ebf0bc2bc20ef880ed00a">Cluedo::Solver::player_count</a></div><div class="ttdeci">std::size_t player_count() const</div><div class="ttdef"><b>Definition</b> Solver.hpp:42</div></div>
202-
<div class="ttc" id="aclassCluedo_1_1Solver_html_ace8817d847a1fca9894801d55f578e0f"><div class="ttname"><a href="../../dc/d77/classCluedo_1_1Solver.html#ace8817d847a1fca9894801d55f578e0f">Cluedo::Solver::learn_from_suggestion</a></div><div class="ttdeci">void learn_from_suggestion(Suggestion const &amp;suggestion, bool infer_new_info=true)</div><div class="ttdef"><b>Definition</b> Solver.cpp:58</div></div>
202+
<div class="ttc" id="aclassCluedo_1_1Solver_html_ace8817d847a1fca9894801d55f578e0f"><div class="ttname"><a href="../../dc/d77/classCluedo_1_1Solver.html#ace8817d847a1fca9894801d55f578e0f">Cluedo::Solver::learn_from_suggestion</a></div><div class="ttdeci">void learn_from_suggestion(Suggestion const &amp;suggestion, bool infer_new_info=true)</div><div class="ttdef"><b>Definition</b> Solver.cpp:74</div></div>
203203
<div class="ttc" id="aclassCluedo_1_1Solver_html_af6f7cdb2c1205320a5dfea77ac18bc34"><div class="ttname"><a href="../../dc/d77/classCluedo_1_1Solver.html#af6f7cdb2c1205320a5dfea77ac18bc34">Cluedo::Solver::create</a></div><div class="ttdeci">static Result&lt; Solver, Error &gt; create(std::vector&lt; PlayerData &gt; const &amp;players_data)</div><div class="ttdef"><b>Definition</b> Solver.cpp:16</div></div>
204204
<div class="ttc" id="aclassResult_html"><div class="ttname"><a href="../../d8/dce/classResult.html">Result</a></div><div class="ttdoc">A class that represents a result that can either be a value or an error.</div><div class="ttdef"><b>Definition</b> Result.hpp:28</div></div>
205205
<div class="ttc" id="astructCluedo_1_1PlayerData_html"><div class="ttname"><a href="../../d0/dbc/structCluedo_1_1PlayerData.html">Cluedo::PlayerData</a></div><div class="ttdoc">A struct that contains the data of a player.</div><div class="ttdef"><b>Definition</b> Solver.hpp:14</div></div>

src/Solver.cpp

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,23 @@ void Solver::learn_player_card_state(std::size_t player_index, Card card, bool h
4949
}
5050

5151
void Solver::learn_player_has_any_of_cards(std::size_t player_index, CardSet const& card_set, bool infer_new_info) {
52-
player(player_index).add_possible_cards(card_set);
52+
CardSet new_card_set;
53+
for (auto card : card_set) {
54+
if (player(player_index).m_cards_in_hand.contains(card))
55+
return;
56+
57+
if (player(player_index).m_cards_not_in_hand.contains(card))
58+
continue;
59+
60+
new_card_set.insert(card);
61+
}
62+
63+
std::vector<Card> cards;
64+
for (auto card : new_card_set) {
65+
cards.push_back(card);
66+
}
67+
68+
player(player_index).add_possible_cards(new_card_set);
5369

5470
if (infer_new_info)
5571
infer_new_information();

0 commit comments

Comments
 (0)