diff options
| -rw-r--r-- | data/profane.txt | 4 | ||||
| -rw-r--r-- | generator/generator.cpp | 30 |
2 files changed, 27 insertions, 7 deletions
| diff --git a/data/profane.txt b/data/profane.txt index 297b278..66ba23a 100644 --- a/data/profane.txt +++ b/data/profane.txt | |||
| @@ -1162,4 +1162,6 @@ yellowman | |||
| 1162 | zigabo | 1162 | zigabo |
| 1163 | zipperhead | 1163 | zipperhead |
| 1164 | ass | 1164 | ass |
| 1165 | arouse \ No newline at end of file | 1165 | arouse |
| 1166 | xiv | ||
| 1167 | der \ No newline at end of file | ||
| diff --git a/generator/generator.cpp b/generator/generator.cpp index f48d667..b13dea2 100644 --- a/generator/generator.cpp +++ b/generator/generator.cpp | |||
| @@ -375,9 +375,20 @@ void generator::run() { | |||
| 375 | if (f_id1 != f_id2) { | 375 | if (f_id1 != f_id2) { |
| 376 | Form& form = forms_.at(f_id1); | 376 | Form& form = forms_.at(f_id1); |
| 377 | Form& form2 = forms_.at(f_id2); | 377 | Form& form2 = forms_.at(f_id2); |
| 378 | // Top yellow should not be mid yellow. | ||
| 378 | if (form.anagram_set_id == form2.anagram_set_id) { | 379 | if (form.anagram_set_id == form2.anagram_set_id) { |
| 379 | continue; | 380 | continue; |
| 380 | } | 381 | } |
| 382 | // Top yellow should not be top white. | ||
| 383 | if (std::any_of( | ||
| 384 | form.pronunciation_ids.begin(), | ||
| 385 | form.pronunciation_ids.end(), [&form2](size_t p_id) { | ||
| 386 | return std::find(form2.pronunciation_ids.begin(), | ||
| 387 | form2.pronunciation_ids.end(), | ||
| 388 | p_id) == form2.pronunciation_ids.end(); | ||
| 389 | })) { | ||
| 390 | continue; | ||
| 391 | } | ||
| 381 | form.puzzles[kYellowTop].insert(f_id2); | 392 | form.puzzles[kYellowTop].insert(f_id2); |
| 382 | } | 393 | } |
| 383 | } | 394 | } |
| @@ -811,8 +822,10 @@ void generator::run() { | |||
| 811 | Form& holonym_form = forms_.at(holonym_word.base_form_id); | 822 | Form& holonym_form = forms_.at(holonym_word.base_form_id); |
| 812 | Form& meronym_form = forms_.at(meronym_word.base_form_id); | 823 | Form& meronym_form = forms_.at(meronym_word.base_form_id); |
| 813 | 824 | ||
| 814 | holonym_form.puzzles[kBlueBottom].insert(meronym_form.id); | 825 | // There must be some mis-naming somewhere, because things are reversed |
| 815 | meronym_form.puzzles[kRedBottom].insert(holonym_form.id); | 826 | // if we do red with holonym and blue with meronym. |
| 827 | holonym_form.puzzles[kRedBottom].insert(meronym_form.id); | ||
| 828 | meronym_form.puzzles[kBlueBottom].insert(holonym_form.id); | ||
| 816 | } | 829 | } |
| 817 | } | 830 | } |
| 818 | } | 831 | } |
| @@ -844,6 +857,12 @@ void generator::run() { | |||
| 844 | Form& form1 = forms_.at(f_id1); | 857 | Form& form1 = forms_.at(f_id1); |
| 845 | const Form& form2 = forms_.at(f_id2); | 858 | const Form& form2 = forms_.at(f_id2); |
| 846 | 859 | ||
| 860 | // Top purple should not be mid red/blue. | ||
| 861 | if (form1.text.find(form2.text) != std::string::npos || | ||
| 862 | form2.text.find(form1.text) != std::string::npos) { | ||
| 863 | continue; | ||
| 864 | } | ||
| 865 | |||
| 847 | if (std::abs(static_cast<int>(form1.text.size()) - | 866 | if (std::abs(static_cast<int>(form1.text.size()) - |
| 848 | static_cast<int>(form2.text.size())) <= 4) { | 867 | static_cast<int>(form2.text.size())) <= 4) { |
| 849 | form1.puzzles[kPurpleTop].insert(f_id2); | 868 | form1.puzzles[kPurpleTop].insert(f_id2); |
| @@ -1251,11 +1270,10 @@ void generator::FindComboPuzzles(std::string text, PuzzleType left_type, | |||
| 1251 | continue; | 1270 | continue; |
| 1252 | 1271 | ||
| 1253 | for (Form& right_form : forms_) { | 1272 | for (Form& right_form : forms_) { |
| 1254 | if (right_type == kWhiteBottom && | ||
| 1255 | right_form.puzzles[right_type].size() > 3) | ||
| 1256 | continue; | ||
| 1257 | if (right_form.text.size() >= 3 && right_form.puzzles.count(right_type) && | 1273 | if (right_form.text.size() >= 3 && right_form.puzzles.count(right_type) && |
| 1258 | form_by_text_.count(left_form.text + right_form.text)) { | 1274 | form_by_text_.count(left_form.text + right_form.text) && |
| 1275 | !(right_type == kWhiteBottom && | ||
| 1276 | right_form.puzzles[right_type].size() > 3)) { | ||
| 1259 | for (size_t left_hint_id : left_form.puzzles[left_type]) { | 1277 | for (size_t left_hint_id : left_form.puzzles[left_type]) { |
| 1260 | Form& left_hint = forms_[left_hint_id]; | 1278 | Form& left_hint = forms_[left_hint_id]; |
| 1261 | for (size_t right_hint_id : right_form.puzzles[right_type]) { | 1279 | for (size_t right_hint_id : right_form.puzzles[right_type]) { |
