Added getRandInterval funstion. Full support of dictionaries with multiple definitions of one word.

This commit is contained in:
2015-07-23 21:21:57 +03:00
parent 7825985f1d
commit fb3a3fb19a
3 changed files with 13 additions and 4 deletions

View File

@@ -1,5 +1,5 @@
#include "crossgen.hpp" #include "crossgen.hpp"
//TODO: fix crash when genereates crossword in debug mode with floating-point error
const wxChar CELL_CLEAR = wxT('+'); const wxChar CELL_CLEAR = wxT('+');
const wxChar CELL_BORDER = wxT('-'); const wxChar CELL_BORDER = wxT('-');

View File

@@ -51,4 +51,9 @@ bool procCross(
void generateCross(const GridType &grid, const AllWordsType &words, void generateCross(const GridType &grid, const AllWordsType &words,
const CharsTransType &trans_type, std::vector<wxString> &words_out); const CharsTransType &trans_type, std::vector<wxString> &words_out);
template <class InputIterator>
InputIterator getRandInterval(const InputIterator first, const InputIterator last){
auto d = std::distance(first, last);
return next(first, rand() % d);
}
#endif // CROSSGEN_HPP #endif // CROSSGEN_HPP

View File

@@ -140,9 +140,15 @@ void MainFrame::onGenerateClick(wxCommandEvent &event) {
std::vector<WordInfo> winfos; std::vector<WordInfo> winfos;
generateWordInfo(_grid, winfos); generateWordInfo(_grid, winfos);
if ( winfos.size() == 0 )
throw 42;
_ques.clear(); _ques.clear();
for (size_t i = 0; i < words_out.size(); ++i) for (size_t i = 0; i < words_out.size(); ++i)
_ques.push_back(_dict.find(words_out.at(i))->second); _ques.push_back(getRandInterval(
_dict.lower_bound(words_out.at(i)),
_dict.upper_bound(words_out.at(i))
)->second);
tOutput->Clear(); tOutput->Clear();
@@ -154,8 +160,6 @@ void MainFrame::onGenerateClick(wxCommandEvent &event) {
tOutput->AppendText(getQuesString(t_cross)); tOutput->AppendText(getQuesString(t_cross));
if ( winfos.size() == 0 )
throw 42;
SetGridImage(_grid); SetGridImage(_grid);
} }
catch ( ... ){ catch ( ... ){