diff options
| -rw-r--r-- | generator.cpp | 27 | ||||
| -rw-r--r-- | generator.h | 5 | ||||
| -rw-r--r-- | main.cpp | 62 |
3 files changed, 53 insertions, 41 deletions
| diff --git a/generator.cpp b/generator.cpp index c4dd76f..6b6c1be 100644 --- a/generator.cpp +++ b/generator.cpp | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | #include <cctype> | 5 | #include <cctype> |
| 6 | #include <hkutil/string.h> | 6 | #include <hkutil/string.h> |
| 7 | 7 | ||
| 8 | verbly::filter Generator::MakeHintFilter(verbly::filter subfilter, Height height, Colour colour, FilterDirection filter_direction) | 8 | verbly::filter Generator::MakeHintFilter(verbly::filter subfilter, Height height, Colour colour, FilterDirection filter_direction) const |
| 9 | { | 9 | { |
| 10 | switch (colour) { | 10 | switch (colour) { |
| 11 | case kWhite: { | 11 | case kWhite: { |
| @@ -304,7 +304,7 @@ bool Generator::GenerateSinglePanelImpl(std::string name, Height height, Colour | |||
| 304 | if (questions.size() < 1) return false; | 304 | if (questions.size() < 1) return false; |
| 305 | verbly::form question = questions.front();// questions.at(std::uniform_int_distribution<int>(0, questions.size())(rng_)); | 305 | verbly::form question = questions.front();// questions.at(std::uniform_int_distribution<int>(0, questions.size())(rng_)); |
| 306 | 306 | ||
| 307 | if (IsClueTrivial(height, colour, question, solution)) { | 307 | if (IsClueTrivial(height, colour, question, solution, options)) { |
| 308 | return false; | 308 | return false; |
| 309 | } | 309 | } |
| 310 | if (options.max_len_diff >= 0 && std::abs(static_cast<int>(question.getText().size() - solution.getText().size())) > options.max_len_diff) { | 310 | if (options.max_len_diff >= 0 && std::abs(static_cast<int>(question.getText().size() - solution.getText().size())) > options.max_len_diff) { |
| @@ -357,7 +357,7 @@ bool Generator::GenerateDoublePanelImpl(std::string name1, std::string name2, He | |||
| 357 | 357 | ||
| 358 | //std::shuffle(questions.begin(), questions.end(), rng_); | 358 | //std::shuffle(questions.begin(), questions.end(), rng_); |
| 359 | 359 | ||
| 360 | if (IsClueTrivial(height, colour, questions[0], solution) || IsClueTrivial(height, colour, questions[1], solution)) { | 360 | if (IsClueTrivial(height, colour, questions[0], solution, options) || IsClueTrivial(height, colour, questions[1], solution, options)) { |
| 361 | return false; | 361 | return false; |
| 362 | } | 362 | } |
| 363 | if (options.max_len_diff >= 0) { | 363 | if (options.max_len_diff >= 0) { |
| @@ -395,7 +395,8 @@ bool Generator::GenerateCohintedPanelsImpl(std::string name1, std::string name2, | |||
| 395 | 395 | ||
| 396 | //std::shuffle(questions.begin(), questions.end(), rng_); | 396 | //std::shuffle(questions.begin(), questions.end(), rng_); |
| 397 | 397 | ||
| 398 | if (IsClueTrivial(height, colour, question, solutions[0]) || IsClueTrivial(height, colour, question, solutions[1])) { | 398 | if (IsClueTrivial(height, colour, question, solutions[0], options) |
| 399 | || IsClueTrivial(height, colour, question, solutions[1], options)) { | ||
| 399 | return false; | 400 | return false; |
| 400 | } | 401 | } |
| 401 | if (options.max_len_diff >= 0) { | 402 | if (options.max_len_diff >= 0) { |
| @@ -428,7 +429,7 @@ bool Generator::GeneratePairedPanelsImpl(std::string name1, std::string name2, H | |||
| 428 | if (questions.size() < 1) return false; | 429 | if (questions.size() < 1) return false; |
| 429 | verbly::form question = questions.front();// questions.at(std::uniform_int_distribution<int>(0, questions.size())(rng_)); | 430 | verbly::form question = questions.front();// questions.at(std::uniform_int_distribution<int>(0, questions.size())(rng_)); |
| 430 | 431 | ||
| 431 | if (IsClueTrivial(height, effectiveColour, question, solution)) { | 432 | if (IsClueTrivial(height, effectiveColour, question, solution, options)) { |
| 432 | return false; | 433 | return false; |
| 433 | } | 434 | } |
| 434 | 435 | ||
| @@ -506,7 +507,7 @@ bool Generator::GeneratePanelStackImpl(std::string top_name, Colour top_colour, | |||
| 506 | if (questions.empty()) return false; | 507 | if (questions.empty()) return false; |
| 507 | top_hint = questions.front().getText(); | 508 | top_hint = questions.front().getText(); |
| 508 | 509 | ||
| 509 | if (IsClueTrivial(kTop, top_colour, questions.front(), solution)) { | 510 | if (IsClueTrivial(kTop, top_colour, questions.front(), solution, options)) { |
| 510 | return false; | 511 | return false; |
| 511 | } | 512 | } |
| 512 | } | 513 | } |
| @@ -517,7 +518,7 @@ bool Generator::GeneratePanelStackImpl(std::string top_name, Colour top_colour, | |||
| 517 | if (questions.empty()) return false; | 518 | if (questions.empty()) return false; |
| 518 | middle_hint = questions.front().getText(); | 519 | middle_hint = questions.front().getText(); |
| 519 | 520 | ||
| 520 | if (IsClueTrivial(kMiddle, middle_colour, questions.front(), solution)) { | 521 | if (IsClueTrivial(kMiddle, middle_colour, questions.front(), solution, options)) { |
| 521 | return false; | 522 | return false; |
| 522 | } | 523 | } |
| 523 | } | 524 | } |
| @@ -528,7 +529,7 @@ bool Generator::GeneratePanelStackImpl(std::string top_name, Colour top_colour, | |||
| 528 | if (questions.empty()) return false; | 529 | if (questions.empty()) return false; |
| 529 | bottom_hint = questions.front().getText(); | 530 | bottom_hint = questions.front().getText(); |
| 530 | 531 | ||
| 531 | if (IsClueTrivial(kBottom, bottom_colour, questions.front(), solution)) { | 532 | if (IsClueTrivial(kBottom, bottom_colour, questions.front(), solution, options)) { |
| 532 | return false; | 533 | return false; |
| 533 | } | 534 | } |
| 534 | } | 535 | } |
| @@ -708,6 +709,7 @@ verbly::filter Generator::GetWordFilter(FilterDirection dir, GenerateOptions opt | |||
| 708 | wordFilter &= (verbly::form::complexity == 2); | 709 | wordFilter &= (verbly::form::complexity == 2); |
| 709 | } else { | 710 | } else { |
| 710 | wordFilter &= (verbly::form::complexity == 1); | 711 | wordFilter &= (verbly::form::complexity == 1); |
| 712 | wordFilter &= (verbly::form::frequency > 2000000); | ||
| 711 | } | 713 | } |
| 712 | } else { | 714 | } else { |
| 713 | wordFilter &= ((verbly::form::complexity > 1) || (verbly::form::frequency > 2000000)); | 715 | wordFilter &= ((verbly::form::complexity > 1) || (verbly::form::frequency > 2000000)); |
| @@ -720,8 +722,15 @@ bool isDigitWrapper(unsigned char ch) { | |||
| 720 | return std::isdigit(ch); | 722 | return std::isdigit(ch); |
| 721 | } | 723 | } |
| 722 | 724 | ||
| 723 | bool Generator::IsClueTrivial(Height height, Colour colour, const verbly::form& clue, const verbly::form& solution) const | 725 | bool Generator::IsClueTrivial(Height height, Colour colour, const verbly::form& clue, const verbly::form& solution, GenerateOptions options) const |
| 724 | { | 726 | { |
| 727 | if (!options.allow_top_expansion && height == kTop) { | ||
| 728 | verbly::filter questionFilter = MakeHintFilter(solution, kMiddle, colour, kTowardQuestion) && clue; | ||
| 729 | if (!database_->forms(questionFilter).all().empty()) { | ||
| 730 | return true; | ||
| 731 | } | ||
| 732 | } | ||
| 733 | |||
| 725 | if (height == kTop && colour == kWhite) | 734 | if (height == kTop && colour == kWhite) |
| 726 | { | 735 | { |
| 727 | return !database_->forms((verbly::filter)clue && (verbly::word::synonyms %= solution)).all().empty(); | 736 | return !database_->forms((verbly::filter)clue && (verbly::word::synonyms %= solution)).all().empty(); |
| diff --git a/generator.h b/generator.h index 1c7934e..7803004 100644 --- a/generator.h +++ b/generator.h | |||
| @@ -56,6 +56,7 @@ struct GenerateOptions { | |||
| 56 | std::string copy_hidden; // supported by single mid white | 56 | std::string copy_hidden; // supported by single mid white |
| 57 | bool force_two_words = false; | 57 | bool force_two_words = false; |
| 58 | bool must_be_broad = false; // the solution must also be gettable by bottom white/red/blue. supported by single and double | 58 | bool must_be_broad = false; // the solution must also be gettable by bottom white/red/blue. supported by single and double |
| 59 | bool allow_top_expansion = false; // this disables the triviality check that top puzzles can't also apply to middle | ||
| 59 | }; | 60 | }; |
| 60 | 61 | ||
| 61 | class Wanderlust { | 62 | class Wanderlust { |
| @@ -197,7 +198,7 @@ public: | |||
| 197 | 198 | ||
| 198 | private: | 199 | private: |
| 199 | 200 | ||
| 200 | verbly::filter MakeHintFilter(verbly::filter subfilter, Height height, Colour colour, FilterDirection filter_direction); | 201 | verbly::filter MakeHintFilter(verbly::filter subfilter, Height height, Colour colour, FilterDirection filter_direction) const; |
| 201 | 202 | ||
| 202 | bool GenerateSinglePanelImpl(std::string name, Height height, Colour colour, GenerateOptions options); | 203 | bool GenerateSinglePanelImpl(std::string name, Height height, Colour colour, GenerateOptions options); |
| 203 | 204 | ||
| @@ -215,7 +216,7 @@ private: | |||
| 215 | 216 | ||
| 216 | verbly::filter GetWordFilter(FilterDirection direction, GenerateOptions options) const; | 217 | verbly::filter GetWordFilter(FilterDirection direction, GenerateOptions options) const; |
| 217 | 218 | ||
| 218 | bool IsClueTrivial(Height height, Colour colour, const verbly::form& clue, const verbly::form& solution) const; | 219 | bool IsClueTrivial(Height height, Colour colour, const verbly::form& clue, const verbly::form& solution, GenerateOptions options = {}) const; |
| 219 | 220 | ||
| 220 | unsigned int seed_; | 221 | unsigned int seed_; |
| 221 | std::mt19937 rng_; | 222 | std::mt19937 rng_; |
| diff --git a/main.cpp b/main.cpp index 3b6e8e1..3d53cb0 100644 --- a/main.cpp +++ b/main.cpp | |||
| @@ -174,6 +174,8 @@ public: | |||
| 174 | // The Observant | 174 | // The Observant |
| 175 | 175 | ||
| 176 | // Knight/Night | 176 | // Knight/Night |
| 177 | // there are some .allow_top_expansion = true panels that don't do anything yet | ||
| 178 | // and some paired top/middle stacks that aren't implemented bc honestly who caressss | ||
| 177 | gen_.GenerateSinglePanel("Panel_rat_tar", kMiddle, kBlack, {.palindrome = kRejectPalindrome}); | 179 | gen_.GenerateSinglePanel("Panel_rat_tar", kMiddle, kBlack, {.palindrome = kRejectPalindrome}); |
| 178 | gen_.GenerateSinglePanel("Panel_discover_recover", kMiddle, kPurple, {.max_len_diff = 1}); | 180 | gen_.GenerateSinglePanel("Panel_discover_recover", kMiddle, kPurple, {.max_len_diff = 1}); |
| 179 | gen_.GenerateSinglePanel("Panel_deadend_deadened", kTop, kWhite, {.multiword = true}); | 181 | gen_.GenerateSinglePanel("Panel_deadend_deadened", kTop, kWhite, {.multiword = true}); |
| @@ -181,9 +183,9 @@ public: | |||
| 181 | gen_.GenerateSinglePanel("Panel_warner_corner", kTop, kPurple); | 183 | gen_.GenerateSinglePanel("Panel_warner_corner", kTop, kPurple); |
| 182 | gen_.GenerateSinglePanel("Panel_lies_lies", kMiddle, kWhite, {.obscure_hint = true, .max_answer_len = 20}); | 184 | gen_.GenerateSinglePanel("Panel_lies_lies", kMiddle, kWhite, {.obscure_hint = true, .max_answer_len = 20}); |
| 183 | gen_.GeneratePairedPanels("Panel_night_knight", "Panel_knight_night", kMiddle, kBlue); | 185 | gen_.GeneratePairedPanels("Panel_night_knight", "Panel_knight_night", kMiddle, kBlue); |
| 184 | gen_.GenerateSinglePanel("Panel_bee_be", kMiddle, kRed); | 186 | gen_.GenerateSinglePanel("Panel_bee_be", kMiddle, kRed, {.allow_top_expansion = true}); |
| 185 | gen_.GenerateSinglePanel("Panel_new_knew", kMiddle, kBlue, {.max_answer_len = 4}); | 187 | gen_.GenerateSinglePanel("Panel_new_knew", kMiddle, kBlue, {.max_answer_len = 4, .allow_top_expansion = true}); |
| 186 | gen_.GenerateSinglePanel("Panel_fore_for", kMiddle, kRed); | 188 | gen_.GenerateSinglePanel("Panel_fore_for", kMiddle, kRed, {.allow_top_expansion = true}); |
| 187 | gen_.GenerateCohintedPanels("Panel_trusted_trust", "Panel_trusted_rusted", kMiddle, kRed, {.save_for_later = true}); | 189 | gen_.GenerateCohintedPanels("Panel_trusted_trust", "Panel_trusted_rusted", kMiddle, kRed, {.save_for_later = true}); |
| 188 | gen_.GenerateCohintedPanels("Panel_rust_trust", "Panel_rust_crust", kMiddle, kBlue, {.max_answer_len = 5, .save_for_later = true}); | 190 | gen_.GenerateCohintedPanels("Panel_rust_trust", "Panel_rust_crust", kMiddle, kBlue, {.max_answer_len = 5, .save_for_later = true}); |
| 189 | gen_.GenerateSinglePanel("Panel_encrusted_rust", kMiddle, kRed, {.save_for_later = true}); | 191 | gen_.GenerateSinglePanel("Panel_encrusted_rust", kMiddle, kRed, {.save_for_later = true}); |
| @@ -213,11 +215,11 @@ public: | |||
| 213 | gen_.GenerateSinglePanel("Panel_locked_knocked", kMiddle, kPurple, {.max_answer_len = 5, .reuse_solution = true, .unique_pool = "initiated", .max_len_diff = 1}); | 215 | gen_.GenerateSinglePanel("Panel_locked_knocked", kMiddle, kPurple, {.max_answer_len = 5, .reuse_solution = true, .unique_pool = "initiated", .max_len_diff = 1}); |
| 214 | gen_.GenerateSinglePanel("Panel_daughter_laughter", kMiddle, kPurple, {.reuse_solution = true, .unique_pool = "initiated", .max_len_diff = 1}); | 216 | gen_.GenerateSinglePanel("Panel_daughter_laughter", kMiddle, kPurple, {.reuse_solution = true, .unique_pool = "initiated", .max_len_diff = 1}); |
| 215 | gen_.GenerateDoublePanel("Panel_move_love", "Panel_stove_love", kMiddle, kPurple, {.reuse_solution = true, .unique_pool = "initiated", .max_len_diff = 1}); | 217 | gen_.GenerateDoublePanel("Panel_move_love", "Panel_stove_love", kMiddle, kPurple, {.reuse_solution = true, .unique_pool = "initiated", .max_len_diff = 1}); |
| 216 | gen_.GenerateSinglePanel("Panel_scope_type", kMiddle, kPurple, {.reuse_solution = true, .unique_pool = "initiated", .max_len_diff = 1}); | 218 | gen_.GenerateSinglePanel("Panel_scope_type", kMiddle, kPurple, {.reuse_solution = true, .unique_pool = "initiated", .max_len_diff = 1, .allow_top_expansion = true}); |
| 217 | gen_.GenerateSinglePanel("Panel_abyss_this", kMiddle, kPurple, {.reuse_solution = true, .unique_pool = "initiated", .max_len_diff = 1}); | 219 | gen_.GenerateSinglePanel("Panel_abyss_this", kMiddle, kPurple, {.reuse_solution = true, .unique_pool = "initiated", .max_len_diff = 1}); |
| 218 | gen_.GenerateDoublePanel("Panel_sweat_great", "Panel_beat_great", kMiddle, kPurple, {.reuse_solution = true, .unique_pool = "initiated", .max_len_diff = 1}); | 220 | gen_.GenerateDoublePanel("Panel_sweat_great", "Panel_beat_great", kMiddle, kPurple, {.reuse_solution = true, .unique_pool = "initiated", .max_len_diff = 1}); |
| 219 | gen_.GenerateSinglePanel("Panel_alumni_hi", kTop, kPurple, {.reuse_solution = true, .unique_pool = "initiated"}); | 221 | gen_.GenerateSinglePanel("Panel_alumni_hi", kTop, kPurple, {.reuse_solution = true, .unique_pool = "initiated", .allow_top_expansion = true}); |
| 220 | gen_.GenerateSinglePanel("Panel_wrath_path", kMiddle, kPurple, {.reuse_solution = true, .unique_pool = "initiated", .max_len_diff = 1}); | 222 | gen_.GenerateSinglePanel("Panel_wrath_path", kMiddle, kPurple, {.reuse_solution = true, .unique_pool = "initiated", .max_len_diff = 1, .allow_top_expansion = true}); |
| 221 | gen_.GenerateDoublePanel("Panel_knight_write", "Panel_byte_write", kTop, kPurple, {.reuse_solution = true, .unique_pool = "initiated", .max_len_diff = 2}); | 223 | gen_.GenerateDoublePanel("Panel_knight_write", "Panel_byte_write", kTop, kPurple, {.reuse_solution = true, .unique_pool = "initiated", .max_len_diff = 2}); |
| 222 | gen_.GenerateSinglePanel("Panel_maim_same", kTop, kPurple, {.reuse_solution = true, .unique_pool = "initiated", .max_len_diff = 0}); | 224 | gen_.GenerateSinglePanel("Panel_maim_same", kTop, kPurple, {.reuse_solution = true, .unique_pool = "initiated", .max_len_diff = 0}); |
| 223 | gen_.GenerateSinglePanel("Panel_bare_bear", kTop, kPurple, {.reuse_solution = true, .unique_pool = "initiated", .max_len_diff = 0}); | 225 | gen_.GenerateSinglePanel("Panel_bare_bear", kTop, kPurple, {.reuse_solution = true, .unique_pool = "initiated", .max_len_diff = 0}); |
| @@ -304,24 +306,24 @@ public: | |||
| 304 | gen_.GenerateOneRoadManyTurns("Panel_order_onepathmanyturns", "Panel_eon_one", "Panel_path_road", "Panel_any_many", "Panel_send_use_turns"); | 306 | gen_.GenerateOneRoadManyTurns("Panel_order_onepathmanyturns", "Panel_eon_one", "Panel_path_road", "Panel_any_many", "Panel_send_use_turns"); |
| 305 | 307 | ||
| 306 | // Rhyme Rooms | 308 | // Rhyme Rooms |
| 307 | gen_.GeneratePanelStack("Panel_ascend_rhyme", kPurple, "", {}, "Panel_ascend_syn", kWhite, {.unique_pool = "rhyme"}); | 309 | gen_.GeneratePanelStack("Panel_ascend_rhyme", kPurple, "", {}, "Panel_ascend_syn", kWhite, {.unique_pool = "rhyme", .allow_top_expansion = true}); |
| 308 | gen_.GeneratePanelStack("Panel_double_rhyme", kPurple, "", {}, "Panel_double_syn", kWhite, {.unique_pool = "rhyme"}); | 310 | gen_.GeneratePanelStack("Panel_double_rhyme", kPurple, "", {}, "Panel_double_syn", kWhite, {.unique_pool = "rhyme", .allow_top_expansion = true}); |
| 309 | gen_.GeneratePanelStack("Panel_blocked_rhyme", kPurple, "", {}, "Panel_blocked_syn", kWhite, {.unique_pool = "rhyme"}); | 311 | gen_.GeneratePanelStack("Panel_blocked_rhyme", kPurple, "", {}, "Panel_blocked_syn", kWhite, {.unique_pool = "rhyme", .allow_top_expansion = true}); |
| 310 | gen_.GeneratePanelStack("Panel_rise_rhyme", kPurple, "", {}, "Panel_rise_syn", kWhite, {.unique_pool = "rhyme"}); | 312 | gen_.GeneratePanelStack("Panel_rise_rhyme", kPurple, "", {}, "Panel_rise_syn", kWhite, {.unique_pool = "rhyme", .allow_top_expansion = true}); |
| 311 | gen_.GeneratePanelStack("Panel_crystal_rhyme", kPurple, "", {}, "Panel_crystal_syn", kWhite, {.unique_pool = "rhyme"}); | 313 | gen_.GeneratePanelStack("Panel_crystal_rhyme", kPurple, "", {}, "Panel_crystal_syn", kWhite, {.unique_pool = "rhyme", .allow_top_expansion = true}); |
| 312 | gen_.GeneratePanelStack("Panel_creative_rhyme", kPurple, "", {}, "Panel_creative_syn", kWhite, {.unique_pool = "rhyme"}); | 314 | gen_.GeneratePanelStack("Panel_creative_rhyme", kPurple, "", {}, "Panel_creative_syn", kWhite, {.unique_pool = "rhyme", .allow_top_expansion = true}); |
| 313 | gen_.GeneratePanelStack("Panel_child_rhyme", kPurple, "", {}, "Panel_child_syn", kWhite, {.unique_pool = "rhyme"}); | 315 | gen_.GeneratePanelStack("Panel_child_rhyme", kPurple, "", {}, "Panel_child_syn", kWhite, {.unique_pool = "rhyme", .allow_top_expansion = true}); |
| 314 | gen_.GeneratePanelStack("Panel_hidden_rhyme", kPurple, "", {}, "Panel_hidden_syn", kWhite, {.unique_pool = "rhyme"}); | 316 | gen_.GeneratePanelStack("Panel_hidden_rhyme", kPurple, "", {}, "Panel_hidden_syn", kWhite, {.unique_pool = "rhyme", .allow_top_expansion = true}); |
| 315 | gen_.GeneratePanelStack("Panel_word_rhyme", kPurple, "", {}, "Panel_word_whole", kBlue, {.unique_pool = "rhyme"}); | 317 | gen_.GeneratePanelStack("Panel_word_rhyme", kPurple, "", {}, "Panel_word_whole", kBlue, {.unique_pool = "rhyme", .allow_top_expansion = true}); |
| 316 | gen_.GeneratePanelStack("Panel_silent_rhyme", kPurple, "", {}, "Panel_silent_syn", kWhite, {.unique_pool = "rhyme"}); | 318 | gen_.GeneratePanelStack("Panel_silent_rhyme", kPurple, "", {}, "Panel_silent_syn", kWhite, {.unique_pool = "rhyme", .allow_top_expansion = true}); |
| 317 | gen_.GeneratePanelStack("Panel_bones_rhyme", kPurple, "", {}, "Panel_bones_syn", kWhite, {.unique_pool = "rhyme"}); | 319 | gen_.GeneratePanelStack("Panel_bones_rhyme", kPurple, "", {}, "Panel_bones_syn", kWhite, {.unique_pool = "rhyme", .allow_top_expansion = true}); |
| 318 | gen_.GeneratePanelStack("Panel_sentence_rhyme", kPurple, "", {}, "Panel_sentence_whole", kBlue, {.unique_pool = "rhyme"}); | 320 | gen_.GeneratePanelStack("Panel_sentence_rhyme", kPurple, "", {}, "Panel_sentence_whole", kBlue, {.unique_pool = "rhyme", .allow_top_expansion = true}); |
| 319 | gen_.GeneratePanelStack("Panel_dream_rhyme", kPurple, "", {}, "Panel_dream_syn", kWhite, {.unique_pool = "rhyme"}); | 321 | gen_.GeneratePanelStack("Panel_dream_rhyme", kPurple, "", {}, "Panel_dream_syn", kWhite, {.unique_pool = "rhyme", .allow_top_expansion = true}); |
| 320 | gen_.GeneratePanelStack("Panel_mystery_rhyme", kPurple, "", {}, "Panel_mystery_syn", kWhite, {.unique_pool = "rhyme"}); | 322 | gen_.GeneratePanelStack("Panel_mystery_rhyme", kPurple, "", {}, "Panel_mystery_syn", kWhite, {.unique_pool = "rhyme", .allow_top_expansion = true}); |
| 321 | gen_.GeneratePanelStack("Panel_jump_rhyme", kPurple, "", {}, "Panel_jump_syn", kWhite, {.unique_pool = "rhyme"}); | 323 | gen_.GeneratePanelStack("Panel_jump_rhyme", kPurple, "", {}, "Panel_jump_syn", kWhite, {.unique_pool = "rhyme", .allow_top_expansion = true}); |
| 322 | gen_.GeneratePanelStack("Panel_fall_rhyme", kPurple, "", {}, "Panel_fall_syn", kWhite, {.unique_pool = "rhyme"}); | 324 | gen_.GeneratePanelStack("Panel_fall_rhyme", kPurple, "", {}, "Panel_fall_syn", kWhite, {.unique_pool = "rhyme", .allow_top_expansion = true}); |
| 323 | //gen_.GeneratePanelStack("Panel_return_rhyme", kPurple, "", {}, "Panel_return_ant", kBlack, {.unique_pool = "rhyme"}); | 325 | //gen_.GeneratePanelStack("Panel_return_rhyme", kPurple, "", {}, "Panel_return_ant", kBlack, {.unique_pool = "rhyme", .allow_top_expansion = true}); |
| 324 | //gen_.GeneratePanelStack("Panel_descend_rhyme", kPurple, "", {}, "Panel_descend_ant", kBlack, {.unique_pool = "rhyme"}); | 326 | //gen_.GeneratePanelStack("Panel_descend_rhyme", kPurple, "", {}, "Panel_descend_ant", kBlack, {.unique_pool = "rhyme", .allow_top_expansion = true}); |
| 325 | // ^ commenting those out for now because they take disproportionately long to generate currently | 327 | // ^ commenting those out for now because they take disproportionately long to generate currently |
| 326 | gen_.GenerateSinglePanel("Panel_leap_leap", kMiddle, kWhite, {.obscure_hint = true}); | 328 | gen_.GenerateSinglePanel("Panel_leap_leap", kMiddle, kWhite, {.obscure_hint = true}); |
| 327 | 329 | ||
| @@ -405,11 +407,11 @@ public: | |||
| 405 | 407 | ||
| 406 | 408 | ||
| 407 | // The Colorful | 409 | // The Colorful |
| 408 | gen_.GenerateSinglePanel("Panel_begin_start", kBottom, kWhite, {.reuse_solution = true}); | 410 | gen_.GenerateSinglePanel("Panel_begin_start", kBottom, kWhite, {.reuse_solution = true, .unique_pool = "traveled"}); |
| 409 | gen_.GenerateSinglePanel("Panel_found_lost", kBottom, kBlack, {.reuse_solution = true}); | 411 | gen_.GenerateSinglePanel("Panel_found_lost", kBottom, kBlack, {.reuse_solution = true, .unique_pool = "agreeable"}); |
| 410 | gen_.GenerateSinglePanel("Panel_loaf_crust", kBottom, kRed, {.reuse_solution = true}); | 412 | gen_.GenerateSinglePanel("Panel_loaf_crust", kBottom, kRed, {.reuse_solution = true, .unique_pool = "bold"}); |
| 411 | //Panel_eggs_breakfast: cream? butter! | 413 | //Panel_eggs_breakfast: cream? butter! |
| 412 | gen_.GenerateSinglePanel("Panel_sun_sky", kBottom, kBlue, {.reuse_solution = true}); | 414 | gen_.GenerateSinglePanel("Panel_sun_sky", kBottom, kBlue, {.reuse_solution = true, .unique_pool = "undeterred"}); |
| 413 | //Panel_teacher_substitute: spoon? fork! | 415 | //Panel_teacher_substitute: spoon? fork! |
| 414 | //Panel_walnuts_orange: letters? numbers! | 416 | //Panel_walnuts_orange: letters? numbers! |
| 415 | //Panel_path_i: walls? green! | 417 | //Panel_path_i: walls? green! |
| @@ -506,7 +508,7 @@ public: | |||
| 506 | gen_.GenerateSinglePanel("Panel_red_top_2", kTop, kRed); | 508 | gen_.GenerateSinglePanel("Panel_red_top_2", kTop, kRed); |
| 507 | gen_.GenerateSinglePanel("Panel_red_top_3", kTop, kRed); | 509 | gen_.GenerateSinglePanel("Panel_red_top_3", kTop, kRed); |
| 508 | gen_.GenerateSinglePanel("Panel_red_top_4", kTop, kRed); | 510 | gen_.GenerateSinglePanel("Panel_red_top_4", kTop, kRed); |
| 509 | //gen_.GeneratePanelStack("Panel_red_top_5", kRed, "Panel_red_mid_2", kRed, "", {}); // slow | 511 | //gen_.GeneratePanelStack("Panel_red_top_5", kRed, "Panel_red_mid_2", kRed, "", {}, .allow_top_expansion = true); // slow |
| 510 | gen_.GenerateSinglePanel("Panel_red_mid_1", kMiddle, kRed); | 512 | gen_.GenerateSinglePanel("Panel_red_mid_1", kMiddle, kRed); |
| 511 | gen_.GenerateSinglePanel("Panel_red_mid_3", kMiddle, kRed); | 513 | gen_.GenerateSinglePanel("Panel_red_mid_3", kMiddle, kRed); |
| 512 | gen_.GeneratePanelStack("", {}, "Panel_red_mid_4", kRed, "Panel_red_bot_4", kRed); | 514 | gen_.GeneratePanelStack("", {}, "Panel_red_mid_4", kRed, "Panel_red_bot_4", kRed); |
| @@ -518,7 +520,7 @@ public: | |||
| 518 | 520 | ||
| 519 | // The Artistic | 521 | // The Artistic |
| 520 | gen_.GeneratePanelStack("Panel_blue_top_1", kBlue, "", {}, "Panel_red_bot_1", kRed); | 522 | gen_.GeneratePanelStack("Panel_blue_top_1", kBlue, "", {}, "Panel_red_bot_1", kRed); |
| 521 | gen_.GeneratePanelStack("", {}, "Panel_red_mid_2", kRed, "Panel_blue_bot_2", kBlue); | 523 | gen_.GeneratePanelStack("", {}, "Panel_red_mid_22", kRed, "Panel_blue_bot_2", kBlue); |
| 522 | gen_.GeneratePanelStack("", {}, "Panel_blue_mid_3", kBlue, "Panel_red_bot_3", kRed); | 524 | gen_.GeneratePanelStack("", {}, "Panel_blue_mid_3", kBlue, "Panel_red_bot_3", kRed); |
| 523 | gen_.GeneratePanelStack("Panel_red_top_4", kRed, "Panel_blue_mid_4", kBlue, "", {}); | 525 | gen_.GeneratePanelStack("Panel_red_top_4", kRed, "Panel_blue_mid_4", kBlue, "", {}); |
| 524 | gen_.GeneratePanelStack("Panel_yellow_top_5", kYellow, "", {}, "Panel_blue_bot_5", kBlue); | 526 | gen_.GeneratePanelStack("Panel_yellow_top_5", kYellow, "", {}, "Panel_blue_bot_5", kBlue); |
