Added getRandInterval funstion. Full support of dictionaries with multiple definitions of one word.
This commit is contained in:
@@ -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('-');
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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 ( ... ){
|
||||||
|
|||||||
Reference in New Issue
Block a user