#include #include #include #include #include "Generate.h" #include "Random.h" void MakeSecretSymmetryGrid(Generate& generator) { for (int x : {0, 6, 8, 14}) { for (int y : {0, 6, 8, 14}) { generator.setSymbol(Decoration::Start, x, y); } } for (int x : {0, 14}) { for (int y : {2, 4, 10, 12}) { generator.setSymbol(Decoration::Exit, x, y); generator.setSymbol(Decoration::Exit, y, x); } } } Rice::Object wittle_generator_generate_easy(Rice::Object /* self */) { static std::vector> generator_fns{ [](Generate& generator) { generator.setSymbol(Decoration::Start, 2 * 2, 2 * 2); generator.setSymbol(Decoration::Exit, 4 * 2, 0); generator.generate( 4, 4, {{{Decoration::Dot_Intersection, 25}, {Decoration::Gap, 2}}}); }, [](Generate& generator) { generator.setSymbol(Decoration::Start, 0, 4 * 2); generator.generate(4, 4, {{{Decoration::Stone | Decoration::Color::Black, 7}, {Decoration::Stone | Decoration::Color::White, 5}, {Decoration::Exit, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.setSymmetry(Panel::Rotational); generator.generate(6, 6, {{{Decoration::Gap, 15}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.setSymmetry(Panel::Vertical); generator.generate(5, 8, {{{Decoration::Gap, 15}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.setSymmetry(Panel::Horizontal); generator.generate(5, 5, {{{Decoration::Dot, 7}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.setSymmetry(Panel::Rotational); generator.generate(5, 5, {{{Decoration::Dot, 6}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.setSymmetry(Panel::Rotational); generator.generate(5, 5, {{{Decoration::Dot | Decoration::Color::Blue, 1}, {Decoration::Dot | Decoration::Color::Yellow, 2}, {Decoration::Dot, 4}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 4, 4, {{{Decoration::Poly | Decoration::Color::Yellow, 2}}}); }, [](Generate& generator) { generator.setFlag(Generate::FullGaps); generator.setFlag(Generate::StartEdgeOnly); generator.generate(5, 5, {{{Decoration::Gap, 16}, {Decoration::Dot, 10}, {Decoration::Exit, 1}, {Decoration::Start, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate(3, 3, {{{Decoration::Eraser | Decoration::Color::Green, 1}, {Decoration::Dot, 8}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 4, 4, {{{Decoration::Stone | Decoration::Color::White, 8}, {Decoration::Stone | Decoration::Color::Black, 4}, {Decoration::Eraser | Decoration::Color::Green, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 4, 4, {{{Decoration::Stone | Decoration::Color::Red, 4}, {Decoration::Stone | Decoration::Color::White, 4}, {Decoration::Stone | Decoration::Color::Black, 3}, {Decoration::Eraser | Decoration::Color::Green, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.setFlag(Generate::RequireCombineShapes); generator.generate(4, 4, {{{Decoration::Poly | Decoration::Color::Yellow, 1}, {Decoration::Poly | Decoration::Color::Yellow | Decoration::Can_Rotate, 1}, {Decoration::Gap, 5}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 3, 3, {{{Decoration::Poly | Decoration::Color::Yellow, 3}, {Decoration::Eraser | Decoration::Color::White, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::FullGaps); generator.generate(4, 4, {{{Decoration::Gap, 8}, {Decoration::Dot_Intersection, 10}, {Decoration::Exit, 1}, {Decoration::Start, 3}}}); }, [](Generate& generator) { generator.generate(5, 5, {{{Decoration::Exit, 1}, {Decoration::Stone | Decoration::Color::Black, 11}, {Decoration::Stone | Decoration::Color::White, 8}, {Decoration::Start, 3}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate(4, 4, {{{Decoration::Star | Decoration::Color::Green, 6}, {Decoration::Star | Decoration::Color::Orange, 5}, {Decoration::Eraser | Decoration::Orange, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate(4, 4, {{{Decoration::Star | Decoration::Color::Orange, 6}, {Decoration::Star | Decoration::Color::Magenta, 5}, {Decoration::Star | Decoration::Color::Green, 4}, {Decoration::Eraser | Decoration::Magenta, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate(4, 4, {{{Decoration::Star | Decoration::Color::Magenta, 6}, {Decoration::Poly | Decoration::Color::Yellow, 2}, {Decoration::Eraser | Decoration::White, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate(4, 4, {{{Decoration::Star | Decoration::Color::Magenta, 5}, {Decoration::Poly | Decoration::Color::Yellow, 2}, {Decoration::Eraser | Decoration::White, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.generate(4, 4, {{{Decoration::Star | Decoration::Color::Orange, 4}, {Decoration::Gap, 10}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate(5, 5, {{{Decoration::Star | Decoration::Color::Orange, 10}, {Decoration::Gap, 3}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.generate(4, 4, {{{Decoration::Star | Decoration::Color::Orange, 4}, {Decoration::Star | Decoration::Color::Magenta, 4}, {Decoration::Gap, 8}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.generate(4, 4, {{{Decoration::Star | Decoration::Color::Orange, 4}, {Decoration::Star | Decoration::Color::Magenta, 2}, {Decoration::Star | Decoration::Color::Green, 2}, {Decoration::Gap, 8}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.generate( 4, 3, {{{Decoration::Star | Decoration::Color::Orange, 6}, {Decoration::Star | Decoration::Color::Magenta, 4}, {Decoration::Star | Decoration::Color::Green, 2}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.setFlag(Generate::FullGaps); generator.generate(4, 4, {{{Decoration::Star | Decoration::Color::Magenta, 6}, {Decoration::Dot_Intersection, 6}, {Decoration::Gap, 3}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.generate( 4, 4, {{{Decoration::Star | Decoration::Color::Magenta, 4}, {Decoration::Stone | Decoration::Color::Black, 4}, {Decoration::Stone | Decoration::Color::White, 4}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.generate( 3, 3, {{{Decoration::Star | Decoration::Color::Black, 1}, {Decoration::Stone | Decoration::Color::Black, 2}, {Decoration::Stone | Decoration::Color::White, 2}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.generate( 4, 4, {{{Decoration::Star | Decoration::Color::White, 2}, {Decoration::Stone | Decoration::Color::Black, 2}, {Decoration::Stone | Decoration::Color::White, 2}, {Decoration::Stone | Decoration::Color::Purple, 2}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.generate( 4, 4, {{{Decoration::Poly | Decoration::Color::Orange, 2}, {Decoration::Star | Decoration::Color::Magenta, 4}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.generate( 4, 5, {{{Decoration::Stone | Decoration::Color::White, 8}, {Decoration::Stone | Decoration::Color::Black, 8}, {Decoration::Eraser | Decoration::Color::White, 2}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.generate(4, 5, {{{Decoration::Poly | Decoration::Color::Orange, 2}, {Decoration::Stone | Decoration::Color::White, 4}, {Decoration::Stone | Decoration::Color::Black, 4}, {Decoration::Gap, 4}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 4, 4, {{{Decoration::Dot_Intersection, 25}, {Decoration::Poly | Decoration::Color::Yellow, 2}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 4, 4, {{{Decoration::Dot_Intersection, 25}, {Decoration::Poly | Decoration::Color::Yellow | Decoration::Can_Rotate, 2}, {Decoration::Eraser | Decoration::Color::White, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.setSymmetry(Panel::Rotational); generator.generate( 5, 5, {{{Decoration::Stone | Decoration::Color::Black, 6}, {Decoration::Stone | Decoration::Color::White, 6}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.setSymmetry(Panel::Rotational); generator.generate(5, 5, {{{Decoration::Stone | Decoration::Color::Black, 5}, {Decoration::Stone | Decoration::Color::White, 5}, {Decoration::Dot, 3}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.setFlag(Generate::SplitShapes); generator.generate(4, 4, {{{Decoration::Poly | Decoration::Color::Yellow, 3}, {Decoration::Gap, 8}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.setFlag(Generate::BigShapes); generator.generate(5, 5, {{{Decoration::Poly | Decoration::Color::Yellow, 2}, {Decoration::Gap, 12}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.setFlag(Generate::DisconnectShapes); generator.generate( 3, 3, {{{Decoration::Poly | Decoration::Color::Yellow, 2}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.setFlag(Generate::DisconnectShapes); generator.setFlag(Generate::BigShapes); generator.generate( 4, 4, {{{Decoration::Poly | Decoration::Color::Yellow, 2}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.setFlag(Generate::RequireCombineShapes); generator.setFlag(Generate::DisableCancelShapes); generator.generate(3, 3, {{{Decoration::Poly | Decoration::Color::Yellow, 2}, {Decoration::Poly | Decoration::Negative | Decoration::Color::Blue, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.setFlag(Generate::RequireCombineShapes); generator.setFlag(Generate::DisableCancelShapes); generator.generate(4, 4, {{{Decoration::Poly | Decoration::Color::Yellow, 2}, {Decoration::Poly | Decoration::Negative | Decoration::Color::Blue, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.setFlag(Generate::BigShapes); generator.setFlag(Generate::DisableCancelShapes); generator.generate(4, 4, {{{Decoration::Poly | Decoration::Color::Yellow, 2}, {Decoration::Poly | Decoration::Negative | Decoration::Color::Blue, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.setFlag(Generate::RequireCancelShapes); generator.generate(4, 4, {{{Decoration::Poly | Decoration::Color::Yellow, 3}, {Decoration::Poly | Decoration::Negative | Decoration::Color::Blue, 2}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 4, 4, {{{Decoration::Triangle | Decoration::Color::Orange, 6}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.setFlag(Generate::LongPath); generator.generate( 5, 4, {{{Decoration::Star | Decoration::Color::Magenta, 6}, {Decoration::Stone | Decoration::Color::Orange, 4}, {Decoration::Stone | Decoration::Color::Green, 4}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 4, 4, {{{Decoration::Dot, 6}, {Decoration::Stone | Decoration::Color::Black, 3}, {Decoration::Stone | Decoration::Color::White, 3}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 4, 4, {{{Decoration::Dot, 4}, {Decoration::Stone | Decoration::Color::Black, 3}, {Decoration::Stone | Decoration::Color::White, 2}, {Decoration::Poly | Decoration::Color::Yellow, 1}}}); }, [](Generate& generator) { generator.setSymmetry(Panel::Rotational); generator.generate(5, 5, {{{Decoration::Dot | Decoration::Color::Blue, 2}, {Decoration::Dot | Decoration::Color::Yellow, 2}, {Decoration::Dot, 4}, {Decoration::Start, 2}, {Decoration::Exit, 1}}}); }, }; Generate generator; int choice = Random::rand() % generator_fns.size(); std::cout << "Generate EASY: choice " << std::dec << choice << std::endl; generator_fns.at(choice)(generator); Rice::String str(generator.AsCode()); return str; } Rice::Object wittle_generator_generate_medium(Rice::Object /* self */) { static std::vector> generator_fns{ [](Generate& generator) { generator.setSymbol(Decoration::Start, 2 * 2, 2 * 2); generator.setSymbol(Decoration::Exit, 4 * 2, 0); generator.generate( 4, 4, {{{Decoration::Stone | Decoration::Color::White, 5}, {Decoration::Stone | Decoration::Color::Black, 5}, {Decoration::Dot, 4}, {Decoration::Eraser | Decoration::Color::Green, 1}}}); }, [](Generate& generator) { generator.setSymbol(Decoration::Exit, 0, 0); generator.setSymbol(Decoration::Exit, 7 * 2, 0); generator.setSymbol(Decoration::Exit, 7 * 2, 7 * 2); generator.generate(7, 7, {{{Decoration::Stone | Decoration::Color::White, 10}, {Decoration::Stone | Decoration::Color::Black, 10}, {Decoration::Dot, 10}, {Decoration::Start, 4}}}); }, [](Generate& generator) { generator.setSymbol(Decoration::Exit, 0, 0); generator.setSymbol(Decoration::Exit, 7 * 2, 0); generator.setSymbol(Decoration::Exit, 7 * 2, 7 * 2); generator.generate( 7, 7, {{{Decoration::Stone | Decoration::Color::White, 10}, {Decoration::Stone | Decoration::Color::Black, 10}, {Decoration::Dot, 10}, {Decoration::Eraser | Decoration::Color::Purple, 1}, {Decoration::Start, 3}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate(5, 5, {{{Decoration::Star | Decoration::White, 8}, {Decoration::Star | Decoration::Black, 6}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.setFlag(Generate::DisconnectShapes); generator.generate( 4, 4, {{{Decoration::Poly | Decoration::Color::Yellow, 3}, {Decoration::Eraser | Decoration::Color::White, 1}}}); }, [](Generate& generator) { generator.setSymbol(Decoration::Start, 2 * 2, 2 * 2); generator.setSymbol(Decoration::Exit, 4 * 2, 0); generator.generate( 4, 4, {{{Decoration::Dot_Intersection, 25}, {Decoration::Stone | Decoration::Color::Black, 2}, {Decoration::Stone | Decoration::Color::White, 2}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.setFlag(Generate::RequireCancelShapes); generator.generate(6, 6, {{{Decoration::Dot_Intersection, 49}, {Decoration::Poly | Decoration::Color::Yellow, 1}, {Decoration::Poly | Decoration::Color::Yellow | Decoration::Can_Rotate, 2}, {Decoration::Poly | Decoration::Color::Blue | Decoration::Negative, 3}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 4, 4, {{{Decoration::Poly | Decoration::Color::Yellow, 3}, {Decoration::Eraser | Decoration::Color::White, 1}}}); }, [](Generate& generator) { generator.setSymbol(Decoration::Start, 0, 3 * 2); generator.setSymbol(Decoration::Exit, 6 * 2, 3 * 2); generator.generate(6, 3, {{{Decoration::Star | Decoration::Color::Magenta, 3}, {Decoration::Poly | Decoration::Color::Yellow, 3}, {Decoration::Eraser | Decoration::White, 1}}}); }, [](Generate& generator) { generator.setSymbol(Decoration::Start, 0, 3 * 2); generator.setSymbol(Decoration::Exit, 6 * 2, 3 * 2); generator.generate(6, 3, {{{Decoration::Star | Decoration::Color::Magenta, 5}, {Decoration::Poly | Decoration::Color::Yellow, 3}, {Decoration::Eraser | Decoration::White, 1}}}); }, [](Generate& generator) { generator.setSymbol(Decoration::Start, 0, 3 * 2); generator.setSymbol(Decoration::Exit, 6 * 2, 3 * 2); generator.generate(6, 3, {{{Decoration::Star | Decoration::Color::Magenta, 6}, {Decoration::Poly | Decoration::Color::Yellow, 3}, {Decoration::Eraser | Decoration::White, 1}}}); }, [](Generate& generator) { generator.setSymbol(Decoration::Start, 0, 3 * 2); generator.setSymbol(Decoration::Exit, 7 * 2, 3 * 2); generator.generate(7, 3, {{{Decoration::Star | Decoration::Color::Magenta, 5}, {Decoration::Poly | Decoration::Color::Yellow, 3}, {Decoration::Eraser | Decoration::White, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.generate( 4, 4, {{{Decoration::Star | Decoration::Color::Orange, 6}, {Decoration::Star | Decoration::Color::Magenta, 6}, {Decoration::Star | Decoration::Color::Green, 4}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.setFlag(Generate::FullGaps); generator.generate(5, 5, {{{Decoration::Star | Decoration::Color::Magenta, 8}, {Decoration::Dot_Intersection, 9}, {Decoration::Gap, 5}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.generate( 4, 4, {{{Decoration::Star | Decoration::Color::Black, 4}, {Decoration::Star | Decoration::Color::White, 4}, {Decoration::Stone | Decoration::Color::Black, 2}, {Decoration::Stone | Decoration::Color::White, 2}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.generate( 5, 5, {{{Decoration::Poly | Decoration::Color::Orange, 2}, {Decoration::Poly | Decoration::Color::Magenta, 1}, {Decoration::Star | Decoration::Color::Magenta, 3}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.setFlag(Generate::RequireCombineShapes); generator.generate( 5, 5, {{{Decoration::Poly | Decoration::Color::Orange, 1}, {Decoration::Poly | Decoration::Can_Rotate | Decoration::Color::Orange, 1}, {Decoration::Star | Decoration::Color::Magenta, 4}, {Decoration::Star | Decoration::Color::Green, 4}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 4, 4, {{{Decoration::Poly | Decoration::Color::Orange, 3}, {Decoration::Stone | Decoration::Color::White, 2}, {Decoration::Stone | Decoration::Color::Black, 2}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate(4, 4, {{{Decoration::Dot_Intersection, 25}, {Decoration::Poly | Decoration::Can_Rotate | Decoration::Color::Yellow, 2}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.setFlag(Generate::SmallShapes); generator.generate( 5, 5, {{{Decoration::Poly | Decoration::Can_Rotate | Decoration::Color::Yellow, 4}, {Decoration::Star | Decoration::Color::Orange, 6}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate(5, 5, {{{Decoration::Poly | Decoration::Color::Yellow, 3}, {Decoration::Gap, 5}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 5, 5, {{{Decoration::Poly | Decoration::Color::Yellow, 4}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.setFlag(Generate::DisconnectShapes); generator.generate( 4, 4, {{{Decoration::Poly | Decoration::Color::Yellow, 3}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate(5, 5, {{{Decoration::Poly | Decoration::Can_Rotate | Decoration::Color::Yellow, 2}, {Decoration::Poly | Decoration::Color::Yellow, 1}, {Decoration::Gap, 2}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.setFlag(Generate::BigShapes); generator.generate(5, 5, {{{Decoration::Poly | Decoration::Can_Rotate | Decoration::Color::Yellow, 3}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 5, 6, {{{Decoration::Poly | Decoration::Color::Yellow, 5}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.setFlag(Generate::BigShapes); generator.generate(4, 4, {{{Decoration::Poly | Decoration::Color::Yellow, 2}, {Decoration::Poly | Decoration::Negative | Decoration::Color::Blue, 2}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate(4, 4, {{{Decoration::Poly | Decoration::Color::Yellow, 3}, {Decoration::Poly | Decoration::Negative | Decoration::Color::Blue, 2}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 4, 4, {{{Decoration::Triangle | Decoration::Color::Orange, 8}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.setFlag(Generate::LongestPath); generator.setFlag(Generate::FullGaps); generator.generate( 6, 6, {{{Decoration::Dot_Intersection, 12}, {Decoration::Gap, 18}}}); }, [](Generate& generator) { generator.generate(5, 5, {{{Decoration::Start, 8}, {Decoration::Exit, 1}, {Decoration::Dot_Intersection, 36}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.setSymmetry(Panel::Horizontal); generator.generate( 6, 6, {{{Decoration::Triangle | Decoration::Color::Orange, 12}, {Decoration::Start, 1}, {Decoration::Exit, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 4, 4, {{{Decoration::Dot, 4}, {Decoration::Stone | Decoration::Color::Black, 2}, {Decoration::Stone | Decoration::Color::White, 2}, {Decoration::Star | Decoration::Color::Black, 2}, {Decoration::Star | Decoration::Color::White, 2}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 4, 4, {{{Decoration::Dot, 4}, {Decoration::Stone | Decoration::Color::Black, 1}, {Decoration::Stone | Decoration::Color::White, 3}, {Decoration::Star | Decoration::Color::Black, 3}, {Decoration::Star | Decoration::Color::White, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 5, 5, {{{Decoration::Poly | Decoration::Color::Yellow, 2}, {Decoration::Stone | Decoration::Color::Black, 4}, {Decoration::Stone | Decoration::Color::White, 4}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 5, 5, {{{Decoration::Stone | Decoration::Color::Cyan, 2}, {Decoration::Stone | Decoration::Color::Yellow, 2}, {Decoration::Star | Decoration::Color::Cyan, 3}, {Decoration::Star | Decoration::Color::Yellow, 3}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 6, 6, {{{Decoration::Stone | Decoration::Color::Cyan, 2}, {Decoration::Stone | Decoration::Color::Magenta, 2}, {Decoration::Star | Decoration::Color::Cyan, 2}, {Decoration::Star | Decoration::Color::Magenta, 1}, {Decoration::Poly | Decoration::Color::Cyan, 1}, {Decoration::Poly | Decoration::Color::Magenta, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 5, 5, {{{Decoration::Triangle | Decoration::Color::Orange, 10}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 5, 3, {{{Decoration::Stone | Decoration::Color::Black, 4}, {Decoration::Stone | Decoration::Color::White, 3}, {Decoration::Triangle | Decoration::Color::Orange, 4}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 4, 4, {{{Decoration::Dot, 25}, {Decoration::Triangle | Decoration::Color::Orange, 6}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.setFlag(Generate::RequireCombineShapes); generator.setSymmetry(Panel::Rotational); generator.generate( 5, 5, {{{Decoration::Poly | Decoration::Color::Yellow, 3}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.setFlag(Generate::DisconnectShapes); generator.setFlag(Generate::BigShapes); generator.generate( 5, 5, {{{Decoration::Poly | Decoration::Color::Yellow, 3}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.setFlag(Generate::DisconnectShapes); generator.generate(4, 4, {{{Decoration::Poly | Decoration::Color::Yellow, 3}, {Decoration::Poly | Decoration::Color::Blue | Decoration::Negative, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 4, 4, {{{Decoration::Stone | Decoration::Color::Black, 3}, {Decoration::Stone | Decoration::Color::White, 3}, {Decoration::Triangle | Decoration::Color::Orange, 4}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 4, 4, {{{Decoration::Star | Decoration::Color::Black, 4}, {Decoration::Star | Decoration::Color::White, 4}, {Decoration::Triangle | Decoration::Color::Orange, 4}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 4, 4, {{{Decoration::Star | Decoration::Color::Orange, 3}, {Decoration::Triangle | Decoration::Color::Orange, 4}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 4, 4, {{{Decoration::Star | Decoration::Color::Black, 2}, {Decoration::Star | Decoration::Color::Orange, 2}, {Decoration::Stone | Decoration::Color::Black, 1}, {Decoration::Stone | Decoration::Color::Orange, 1}, {Decoration::Triangle | Decoration::Color::Orange, 4}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.setFlag(Generate::BigShapes); generator.generate( 4, 4, {{{Decoration::Poly | Decoration::Color::Yellow | Decoration::Can_Rotate, 1}, {Decoration::Triangle | Decoration::Color::Orange, 3}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.setFlag(Generate::BigShapes); generator.generate( 5, 5, {{{Decoration::Poly | Decoration::Color::Yellow | Decoration::Can_Rotate, 1}, {Decoration::Triangle | Decoration::Color::Orange, 6}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.setFlag(Generate::BigShapes); generator.generate( 5, 5, {{{Decoration::Poly | Decoration::Color::Yellow, 2}, {Decoration::Triangle | Decoration::Color::Orange, 4}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 4, 4, {{{Decoration::Dot, 25}, {Decoration::Triangle | Decoration::Color::Orange, 4}}}); }, [](Generate& generator) { generator.setSymbol(Decoration::Start, 0, 4 * 2); generator.setSymbol(Decoration::Exit, 0, 0); generator.generate( 4, 4, {{{Decoration::Dot, 25}, {Decoration::Triangle | Decoration::Color::Orange, 5}}}); }, [](Generate& generator) { generator.setSymbol(Decoration::Start, 0, 4 * 2); generator.setSymbol(Decoration::Exit, 4 * 2, 4 * 2); generator.generate( 4, 4, {{{Decoration::Dot, 25}, {Decoration::Triangle | Decoration::Color::Orange, 5}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 4, 4, {{{Decoration::Dot, 25}, {Decoration::Triangle | Decoration::Color::Orange, 6}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.setFlag(Generate::DisconnectShapes); generator.generate(5, 5, {{{Decoration::Poly | Decoration::Color::Yellow | Decoration::Can_Rotate, 3}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.generate( 4, 4, {{{Decoration::Star | Decoration::Color::Black, 4}, {Decoration::Star | Decoration::Color::White, 4}, {Decoration::Star | Decoration::Color::Orange, 4}, {Decoration::Stone | Decoration::Color::Black, 1}, {Decoration::Stone | Decoration::Color::White, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 3, 3, {{{Decoration::Stone | Decoration::Color::Magenta, 2}, {Decoration::Stone | Decoration::Color::Green, 1}, {Decoration::Star | Decoration::Color::Magenta, 2}, {Decoration::Star | Decoration::Color::Green, 3}, {Decoration::Eraser | Decoration::Color::Magenta, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 4, 4, {{{Decoration::Dot_Intersection, 25}, {Decoration::Poly | Decoration::Color::Yellow, 3}}}); }, [](Generate& generator) { generator.setSymbol(Decoration::Start, 2 * 2, 2 * 2); generator.setSymbol(Decoration::Exit, 4 * 2, 0); generator.generate(4, 4, {{{Decoration::Dot_Intersection, 25}, {Decoration::Poly | Decoration::Color::Yellow | Decoration::Can_Rotate, 2}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 5, 5, {{{Decoration::Poly | Decoration::Color::Green, 4}, {Decoration::Star | Decoration::Color::Green, 3}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 4, 4, {{{Decoration::Triangle2 | Decoration::Color::Orange, 12}}}); }, [](Generate& generator) { generator.setSymbol(Decoration::Exit, 0, 0); generator.setSymbol(Decoration::Exit, 7 * 2, 0); generator.setSymbol(Decoration::Exit, 7 * 2, 7 * 2); generator.generate( 7, 7, {{{Decoration::Triangle | Decoration::Color::Orange, 12}, {Decoration::Start, 3}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.generate( 4, 4, {{{Decoration::Star | Decoration::Color::Orange, 1}, {Decoration::Triangle | Decoration::Color::Orange, 7}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.generate( 4, 4, {{{Decoration::Star | Decoration::Color::Orange, 3}, {Decoration::Star | Decoration::Color::Magenta, 2}, {Decoration::Triangle | Decoration::Color::Orange, 2}, {Decoration::Triangle | Decoration::Color::Magenta, 2}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.generate(4, 4, {{{Decoration::Star | Decoration::Color::Magenta, 4}, {Decoration::Dot_Intersection, 25}}}); }, [](Generate& generator) { generator.setSymmetry(Panel::Symmetry::FlipNegXY); generator.generate(7, 7, {{{Decoration::Gap, 10}, {Decoration::Dot_Intersection, 8}, {Decoration::Start, 2}, {Decoration::Exit, 1}}}); }, [](Generate& generator) { generator.setGridSize(7, 7); generator.setSymmetry(Panel::Symmetry::ParallelV); generator.generate(7, 7, {{{Decoration::Gap, 12}, {Decoration::Dot_Intersection, 10}, {Decoration::Start, 2}, {Decoration::Exit, 1}}}); }, [](Generate& generator) { generator.setGridSize(7, 7); generator.setSymmetry(Panel::Symmetry::ParallelHFlip); generator.generate(7, 7, {{{Decoration::Gap, 12}, {Decoration::Dot_Intersection, 10}, {Decoration::Start, 2}, {Decoration::Exit, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::StartEdgeOnly); generator.setSymbol(Decoration::Exit, 4 * 2, 0); generator.generate(4, 4, {{{Decoration::Dot_Intersection, 25}, {Decoration::Poly | Decoration::Color::Yellow, 1}, {Decoration::Poly | Decoration::Color::Yellow | Decoration::Can_Rotate, 2}, {Decoration::Start, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.setSymmetry(Panel::Vertical); generator.generate( 7, 7, {{{Decoration::Poly | Decoration::Color::Yellow, 5}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.generate( 4, 4, {{{Decoration::Star | Decoration::Color::Black, 1}, {Decoration::Star | Decoration::Color::White, 2}, {Decoration::Stone | Decoration::Color::Black, 2}, {Decoration::Stone | Decoration::Color::White, 1}, {Decoration::Poly | Decoration::Can_Rotate | Decoration::Orange, 1}, {Decoration::Poly | Decoration::Orange, 1}}}); }, }; Generate generator; int choice = Random::rand() % generator_fns.size(); std::cout << "Generate MEDIUM: choice " << std::dec << choice << std::endl; generator_fns.at(choice)(generator); Rice::String str(generator.AsCode()); return str; } Rice::Object wittle_generator_generate_expert(Rice::Object /* self */) { static std::vector> generator_fns{ [](Generate& generator) { generator.setFlag(Generate::StartEdgeOnly); generator.setSymmetry(Panel::Rotational); generator.generate( 6, 6, {{{Decoration::Triangle | Decoration::Color::Orange, 12}, {Decoration::Start, 1}, {Decoration::Exit, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::StartEdgeOnly); generator.setFlag(Generate::WriteInvisible); generator.setSymmetry(Panel::Rotational); generator.generate(7, 7, {{{Decoration::Dot | Decoration::Color::Blue, 4}, {Decoration::Dot | Decoration::Color::Yellow, 4}, {Decoration::Dot, 7}, {Decoration::Start, 1}, {Decoration::Exit, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::StartEdgeOnly); generator.setFlag(Generate::WriteInvisible); generator.setSymmetry(Panel::Rotational); generator.generate(7, 7, {{{Decoration::Stone | Decoration::Color::Black, 6}, {Decoration::Stone | Decoration::Color::White, 6}, {Decoration::Start, 1}, {Decoration::Exit, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::StartEdgeOnly); generator.setFlag(Generate::WriteInvisible); generator.setSymmetry(Panel::Rotational); generator.generate(7, 7, {{{Decoration::Star | Decoration::Color::Orange, 6}, {Decoration::Star | Decoration::Color::Green, 6}, {Decoration::Start, 1}, {Decoration::Exit, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::StartEdgeOnly); generator.setFlag(Generate::WriteInvisible); generator.setFlag(Generate::RequireCombineShapes); generator.setSymmetry(Panel::Rotational); generator.generate(5, 5, {{{Decoration::Poly | Decoration::Color::Yellow, 3}, {Decoration::Start, 1}, {Decoration::Exit, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::StartEdgeOnly); generator.setFlag(Generate::WriteInvisible); generator.setSymmetry(Panel::Rotational); generator.generate( 7, 7, {{{Decoration::Dot | Decoration::Color::Blue, 2}, {Decoration::Dot | Decoration::Color::Yellow, 2}, {Decoration::Dot, 8}, {Decoration::Eraser | Decoration::Color::Purple, 1}, {Decoration::Start, 1}, {Decoration::Exit, 1}}}); }, [](Generate& generator) { generator.setSymbol(Decoration::Exit, 0, 0); generator.setSymbol(Decoration::Exit, 0, 4 * 4); generator.setSymbol(Decoration::Exit, 4 * 4, 0); generator.setSymbol(Decoration::Exit, 4 * 4, 4 * 4); generator.generate(8, 8, {{{Decoration::Stone | Decoration::Color::White, 10}, {Decoration::Stone | Decoration::Color::Black, 10}, {Decoration::Dot_Intersection, 81}, {Decoration::Start, 8}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 6, 6, {{{Decoration::Dot_Intersection, 49}, {Decoration::Poly | Decoration::Color::Orange, 1}, {Decoration::Poly | Decoration::Color::Blue, 1}, {Decoration::Poly | Decoration::Negative | Decoration::Color::Blue, 2}, {Decoration::Poly | Decoration::Negative | Decoration::Color::Orange, 1}, {Decoration::Star | Decoration::Color::Orange, 4}, {Decoration::Star | Decoration::Color::Blue, 3}, {Decoration::Triangle | Decoration::Color::Orange, 2}, {Decoration::Triangle | Decoration::Color::Blue, 1}, {Decoration::Stone | Decoration::Color::Orange, 1}, {Decoration::Stone | Decoration::Color::Blue, 2}, {Decoration::Eraser | Decoration::Color::White, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.setSymmetry(Panel::Rotational); generator.generate( 7, 7, {{{Decoration::Poly | Decoration::Color::Yellow, 5}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 5, 5, {{{Decoration::Poly | Decoration::Color::Yellow, 2}, {Decoration::Poly | Decoration::Color::Yellow | Decoration::Can_Rotate, 1}, {Decoration::Stone | Decoration::Color::Black, 5}, {Decoration::Stone | Decoration::Color::White, 3}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.setFlag(Generate::BigShapes); generator.generate( 5, 5, {{{Decoration::Poly | Decoration::Color::Yellow | Decoration::Can_Rotate, 2}, {Decoration::Triangle | Decoration::Color::Orange, 3}, {Decoration::Stone | Decoration::Color::Black, 3}, {Decoration::Stone | Decoration::Color::White, 3}}}); }, [](Generate& generator) { generator.setFlag(Generate::StartEdgeOnly); generator.setSymbol(Decoration::Exit, 4 * 2, 0); generator.generate(5, 5, {{{Decoration::Dot_Intersection, 36}, {Decoration::Poly | Decoration::Color::Yellow, 3}, {Decoration::Start, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.setFlag(Generate::BigShapes); generator.setFlag(Generate::RequireCancelShapes); generator.generate(5, 5, {{{Decoration::Poly | Decoration::Color::Yellow, 3}, {Decoration::Poly | Decoration::Negative | Decoration::Color::Blue, 3}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 5, 6, {{{Decoration::Dot_Intersection, 42}, {Decoration::Poly | Decoration::Color::Yellow, 2}, {Decoration::Poly | Decoration::Color::Yellow | Decoration::Can_Rotate, 1}, {Decoration::Triangle | Decoration::Color::Orange, 3}, {Decoration::Stone | Decoration::Color::Black, 2}, {Decoration::Stone | Decoration::Color::White, 2}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 5, 5, {{{Decoration::Poly | Decoration::Color::Yellow, 3}, {Decoration::Poly | Decoration::Negative | Decoration::Color::Blue, 1}, {Decoration::Stone | Decoration::Color::Black, 4}, {Decoration::Stone | Decoration::Color::White, 3}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 5, 5, {{{Decoration::Poly | Decoration::Color::Yellow, 3}, {Decoration::Poly | Decoration::Negative | Decoration::Color::Blue, 2}, {Decoration::Triangle | Decoration::Color::Orange, 5}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 5, 5, {{{Decoration::Poly | Decoration::Color::Yellow, 3}, {Decoration::Poly | Decoration::Negative | Decoration::Color::Blue, 1}, {Decoration::Triangle | Decoration::Color::Orange, 3}, {Decoration::Stone | Decoration::Color::Black, 2}, {Decoration::Stone | Decoration::Color::White, 2}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 5, 5, {{{Decoration::Poly | Decoration::Color::Yellow, 3}, {Decoration::Poly | Decoration::Negative | Decoration::Color::Blue, 2}, {Decoration::Triangle | Decoration::Color::Orange, 3}, {Decoration::Stone | Decoration::Color::Black, 2}, {Decoration::Stone | Decoration::Color::White, 2}}}); }, [](Generate& generator) { generator.setFlag(Generate::DisconnectShapes); generator.setFlag(Generate::BigShapes); generator.setSymbol(Decoration::Start, 0, 5 * 2); generator.setSymbol(Decoration::Exit, 0, 0); generator.generate( 5, 5, {{{Decoration::Poly | Decoration::Color::Yellow, 2}, {Decoration::Poly | Decoration::Negative | Decoration::Color::Blue, 1}, {Decoration::Triangle | Decoration::Color::Orange, 3}, {Decoration::Stone | Decoration::Color::Black, 2}, {Decoration::Stone | Decoration::Color::White, 2}}}); }, [](Generate& generator) { generator.setFlag(Generate::BigShapes); generator.setSymbol(Decoration::Exit, 5 * 2, 0); generator.generate(5, 5, {{{Decoration::Dot_Intersection, 36}, {Decoration::Poly | Decoration::Color::Yellow, 2}, {Decoration::Poly | Decoration::Negative | Decoration::Color::Blue, 1}, {Decoration::Start, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::BigShapes); generator.setSymbol(Decoration::Exit, 5 * 2, 0); generator.generate(5, 5, {{{Decoration::Dot_Intersection, 36}, {Decoration::Poly | Decoration::Color::Yellow, 3}, {Decoration::Poly | Decoration::Negative | Decoration::Color::Blue, 2}, {Decoration::Start, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.generate( 5, 5, {{{Decoration::Star | Decoration::Color::Orange, 4}, {Decoration::Triangle | Decoration::Color::Orange, 6}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.generate( 5, 5, {{{Decoration::Star | Decoration::Color::Orange, 6}, {Decoration::Triangle | Decoration::Color::Orange, 5}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 5, 5, {{{Decoration::Star | Decoration::Color::Orange, 5}, {Decoration::Triangle | Decoration::Color::Orange, 3}, {Decoration::Stone | Decoration::Color::Orange, 3}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.generate(5, 5, {{{Decoration::Poly | Decoration::Color::Orange, 3}, {Decoration::Poly | Decoration::Negative | Decoration::Color::Blue, 1}, {Decoration::Star | Decoration::Color::Orange, 5}, {Decoration::Star | Decoration::Color::Blue, 3}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.generate(5, 5, {{{Decoration::Poly | Decoration::Color::Orange, 3}, {Decoration::Poly | Decoration::Negative | Decoration::Color::Blue, 2}, {Decoration::Star | Decoration::Color::Orange, 5}, {Decoration::Star | Decoration::Color::Blue, 3}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.generate( 5, 5, {{{Decoration::Poly | Decoration::Color::Orange, 1}, {Decoration::Poly | Decoration::Color::Magenta, 2}, {Decoration::Poly | Decoration::Negative | Decoration::Color::Orange, 2}, {Decoration::Poly | Decoration::Negative | Decoration::Color::Blue, 2}, {Decoration::Star | Decoration::Color::Orange, 3}, {Decoration::Star | Decoration::Color::Blue, 3}, {Decoration::Star | Decoration::Color::Magenta, 3}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.generate( 5, 5, {{{Decoration::Poly | Decoration::Color::Magenta, 2}, {Decoration::Poly | Decoration::Negative | Decoration::Color::Blue, 2}, {Decoration::Star | Decoration::Color::Magenta, 3}, {Decoration::Star | Decoration::Color::Blue, 3}, {Decoration::Triangle | Decoration::Color::Magenta, 2}, {Decoration::Triangle | Decoration::Color::Blue, 2}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.generate( 5, 5, {{{Decoration::Poly | Decoration::Color::Orange, 1}, {Decoration::Poly | Decoration::Color::Blue, 1}, {Decoration::Poly | Decoration::Color::Green, 1}, {Decoration::Poly | Decoration::Negative | Decoration::Color::Blue, 1}, {Decoration::Poly | Decoration::Negative | Decoration::Color::Magenta, 2}, {Decoration::Star | Decoration::Color::Green, 2}, {Decoration::Star | Decoration::Color::Magenta, 1}, {Decoration::Star | Decoration::Color::Orange, 1}, {Decoration::Star | Decoration::Color::Blue, 2}, {Decoration::Triangle | Decoration::Color::Magenta, 2}, {Decoration::Triangle | Decoration::Color::Orange, 1}, {Decoration::Triangle | Decoration::Color::Green, 2}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.generate( 5, 5, {{{Decoration::Star | Decoration::Color::Orange, 4}, {Decoration::Star | Decoration::Color::Magenta, 4}, {Decoration::Triangle | Decoration::Color::Orange, 2}, {Decoration::Triangle | Decoration::Color::Magenta, 2}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.generate( 5, 5, {{{Decoration::Star | Decoration::Color::Orange, 3}, {Decoration::Star | Decoration::Color::Magenta, 3}, {Decoration::Star | Decoration::Color::Green, 6}, {Decoration::Triangle | Decoration::Color::Orange, 2}, {Decoration::Triangle | Decoration::Color::Magenta, 2}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.generate( 5, 5, {{{Decoration::Star | Decoration::Color::Orange, 4}, {Decoration::Star | Decoration::Color::Magenta, 4}, {Decoration::Star | Decoration::Color::Green, 6}, {Decoration::Triangle | Decoration::Color::Orange, 1}, {Decoration::Triangle | Decoration::Color::Magenta, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.generate( 5, 5, {{{Decoration::Star | Decoration::Color::Orange, 2}, {Decoration::Star | Decoration::Color::Magenta, 2}, {Decoration::Star | Decoration::Color::White, 2}, {Decoration::Star | Decoration::Color::Green, 2}, {Decoration::Star | Decoration::Color::Black, 2}, {Decoration::Triangle | Decoration::Color::Orange, 1}, {Decoration::Triangle | Decoration::Color::Magenta, 1}, {Decoration::Triangle | Decoration::Color::White, 1}, {Decoration::Triangle | Decoration::Color::Green, 1}, {Decoration::Triangle | Decoration::Color::Black, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.generate(5, 5, {{{Decoration::Star | Decoration::Color::Magenta, 4}, {Decoration::Star | Decoration::Color::Orange, 6}, {Decoration::Dot_Intersection, 36}}}); }, [](Generate& generator) { generator.setGridSize(7, 7); generator.setFlag(Generate::RequireCombineShapes); generator.setSymmetry(Panel::ParallelV); generator.setSymbol(Decoration::Start, 0, 14); generator.setSymbol(Decoration::Start, 8, 14); generator.setSymbol(Decoration::Exit, 6, 0); generator.setSymbol(Decoration::Exit, 14, 0); generator.generate( 7, 7, {{{Decoration::Poly | Decoration::Color::Orange, 5}}}); }, [](Generate& generator) { generator.setGridSize(7, 7); generator.setFlag(Generate::RequireCombineShapes); generator.setSymmetry(Panel::ParallelHFlip); generator.setSymbol(Decoration::Start, 0, 14); generator.setSymbol(Decoration::Start, 14, 6); generator.setSymbol(Decoration::Exit, 0, 0); generator.setSymbol(Decoration::Exit, 14, 8); generator.generate( 7, 7, {{{Decoration::Poly | Decoration::Color::Orange, 5}}}); }, [](Generate& generator) { generator.setGridSize(7, 7); generator.setFlag(Generate::RequireCombineShapes); generator.setSymmetry(Panel::ParallelVFlip); generator.setSymbol(Decoration::Start, 0, 14); generator.setSymbol(Decoration::Start, 8, 0); generator.setSymbol(Decoration::Exit, 6, 0); generator.setSymbol(Decoration::Exit, 14, 14); generator.generate( 7, 7, {{{Decoration::Poly | Decoration::Color::Orange, 5}}}); }, [](Generate& generator) { generator.setSymmetry(Panel::Symmetry::RotateLeft); generator.setSymbol(Decoration::Start, 4, 4); generator.setSymbol(Decoration::Start, 10, 4); generator.setSymbol(Decoration::Start, 4, 10); generator.setSymbol(Decoration::Start, 10, 10); generator.setSymbol(Decoration::Exit, 4, 0); generator.setSymbol(Decoration::Exit, 14, 4); generator.setSymbol(Decoration::Exit, 0, 10); generator.setSymbol(Decoration::Exit, 10, 14); generator.generate( 7, 7, {{{Decoration::Triangle4 | Decoration::Color::Orange, 1}, {Decoration::Triangle | Decoration::Color::Orange, 4}}}); }, [](Generate& generator) { generator.setFlag(Generate::WriteInvisible); generator.setFlag(Generate::StartEdgeOnly); generator.setSymmetry(Panel::Symmetry::FlipXY); generator.setSymbol(Decoration::Exit, 0, 8); generator.setSymbol(Decoration::Exit, 8, 0); generator.generate(7, 7, {{{Decoration::Dot | Decoration::Color::Blue, 2}, {Decoration::Dot | Decoration::Color::Yellow, 2}, {Decoration::Dot, 8}, {Decoration::Eraser | Decoration::Color::White, 1}, {Decoration::Start, 1}}}); }, [](Generate& generator) { generator.setSymmetry(Panel::Symmetry::FlipXY); generator.setSymbol(Decoration::Start, 0, 16); generator.setSymbol(Decoration::Start, 16, 0); generator.setSymbol(Decoration::Exit, 8, 0); generator.setSymbol(Decoration::Exit, 8, 16); generator.setSymbol(Decoration::Exit, 0, 8); generator.setSymbol(Decoration::Exit, 16, 8); generator.generate( 8, 8, {{{Decoration::Triangle | Decoration::Color::Cyan, 3}, {Decoration::Triangle | Decoration::Color::Yellow, 2}, {Decoration::Star | Decoration::Color::Cyan, 3}, {Decoration::Star | Decoration::Color::Yellow, 3}, {Decoration::Stone | Decoration::Color::Cyan, 2}, {Decoration::Stone | Decoration::Color::Yellow, 3}}}); }, [](Generate& generator) { generator.setGridSize(7, 7); generator.setSymmetry((Random::rand() % 2) == 0 ? Panel::Symmetry::Vertical : Panel::Symmetry::Horizontal); generator.setFlag(Generate::WriteInvisible); generator.setFlag(Generate::DisableDotIntersection); MakeSecretSymmetryGrid(generator); generator.generate( 7, 7, {{{Decoration::Dot | Decoration::Color::Cyan, 2}, {Decoration::Dot | Decoration::Color::Yellow, 2}, {Decoration::Triangle | Decoration::Color::Orange, 4}}}); }, [](Generate& generator) { generator.setGridSize(7, 7); generator.setSymmetry((Random::rand() % 2) == 0 ? Panel::Symmetry::ParallelH : Panel::Symmetry::ParallelV); generator.setFlag(Generate::WriteInvisible); generator.setFlag(Generate::DisableDotIntersection); MakeSecretSymmetryGrid(generator); generator.generate( 7, 7, {{{Decoration::Dot | Decoration::Color::Cyan, 2}, {Decoration::Dot | Decoration::Color::Yellow, 2}, {Decoration::Triangle | Decoration::Color::Orange, 4}}}); }, [](Generate& generator) { generator.setGridSize(7, 7); generator.setSymmetry(Panel::Symmetry::Rotational); generator.setFlag(Generate::WriteInvisible); generator.setFlag(Generate::DisableDotIntersection); MakeSecretSymmetryGrid(generator); generator.generate( 7, 7, {{{Decoration::Dot | Decoration::Color::Cyan, 2}, {Decoration::Dot | Decoration::Color::Yellow, 2}, {Decoration::Triangle | Decoration::Color::Orange, 4}}}); }, [](Generate& generator) { generator.setGridSize(7, 7); generator.setSymmetry((Random::rand() % 2) == 0 ? Panel::Symmetry::ParallelHFlip : Panel::Symmetry::ParallelVFlip); generator.setFlag(Generate::WriteInvisible); generator.setFlag(Generate::DisableDotIntersection); MakeSecretSymmetryGrid(generator); generator.generate( 7, 7, {{{Decoration::Dot | Decoration::Color::Cyan, 2}, {Decoration::Dot | Decoration::Color::Yellow, 2}, {Decoration::Triangle | Decoration::Color::Orange, 4}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 4, 4, {{{Decoration::Triangle | Decoration::Color::Orange, 15}, {Decoration::Eraser | Decoration::Color::Purple, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 4, 4, {{{Decoration::Stone | Decoration::Color::White, 1}, {Decoration::Stone | Decoration::Color::Black, 2}, {Decoration::Stone | Decoration::Color::Red, 2}, {Decoration::Star | Decoration::Color::White, 4}, {Decoration::Star | Decoration::Color::Black, 3}, {Decoration::Star | Decoration::Color::Red, 3}, {Decoration::Decoration::Eraser | Decoration::Color::Green, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 4, 4, {{{Decoration::Poly | Decoration::Color::Yellow, 1}, {Decoration::Poly | Decoration::Color::Yellow | Decoration::Can_Rotate, 1}, {Decoration::Triangle | Decoration::Color::Orange, 3}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 4, 4, {{{Decoration::Poly | Decoration::Color::Yellow, 2}, {Decoration::Poly | Decoration::Color::Yellow | Decoration::Can_Rotate, 1}, {Decoration::Triangle | Decoration::Color::Orange, 2}, {Decoration::Stone | Decoration::Color::Black, 2}, {Decoration::Stone | Decoration::Color::White, 2}}}); }, [](Generate& generator) { generator.setSymbol(Decoration::Start, 4, 4); generator.setSymbol(Decoration::Exit, 8, 0); generator.generate(4, 4, {{{Decoration::Poly | Decoration::Color::Yellow | Decoration::Can_Rotate, 3}, {Decoration::Gap, 3}}}); }, [](Generate& generator) { generator.setSymbol(Decoration::Start, 4, 6); generator.setSymbol(Decoration::Exit, 10, 0); generator.generate(5, 5, {{{Decoration::Poly | Decoration::Color::Yellow | Decoration::Can_Rotate, 3}, {Decoration::Gap, 3}}}); }, [](Generate& generator) { generator.setFlag(Generate::DisconnectShapes); generator.setSymbol(Decoration::Start, 4, 6); generator.setSymbol(Decoration::Exit, 10, 0); generator.generate(5, 5, {{{Decoration::Poly | Decoration::Color::Yellow | Decoration::Can_Rotate, 3}}}); }, [](Generate& generator) { generator.setSymbol(Decoration::Exit, 10, 0); generator.generate(5, 5, {{{Decoration::Dot_Intersection, 36}, {Decoration::Poly | Decoration::Color::Yellow, 2}, {Decoration::Poly | Decoration::Color::Yellow | Decoration::Can_Rotate, 1}, {Decoration::Start, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::BigShapes); generator.setSymbol(Decoration::Exit, 10, 0); generator.generate(5, 5, {{{Decoration::Dot_Intersection, 36}, {Decoration::Poly | Decoration::Color::Yellow, 3}, {Decoration::Start, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::DisconnectShapes); generator.setSymbol(Decoration::Exit, 10, 0); generator.generate(5, 5, {{{Decoration::Dot_Intersection, 36}, {Decoration::Poly | Decoration::Color::Yellow, 3}, {Decoration::Start, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.generate( 4, 4, {{{Decoration::Triangle | Decoration::Color::Magenta, 4}, {Decoration::Stone | Decoration::Color::Black, 2}, {Decoration::Stone | Decoration::Color::White, 2}, {Decoration::Star | Decoration::Color::Black, 1}, {Decoration::Star | Decoration::Color::White, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.generate( 4, 4, {{{Decoration::Triangle | Decoration::Color::Orange, 2}, {Decoration::Triangle | Decoration::Color::Magenta, 2}, {Decoration::Star | Decoration::Color::Magenta, 2}, {Decoration::Star | Decoration::Color::Green, 2}, {Decoration::Stone | Decoration::Color::Orange, 2}, {Decoration::Stone | Decoration::Color::Green, 2}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.generate( 5, 4, {{{Decoration::Triangle | Decoration::Color::Green, 3}, {Decoration::Triangle | Decoration::Color::Magenta, 2}, {Decoration::Star | Decoration::Color::Magenta, 3}, {Decoration::Star | Decoration::Color::Orange, 3}, {Decoration::Stone | Decoration::Color::Orange, 2}, {Decoration::Stone | Decoration::Color::Green, 2}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.generate( 4, 4, {{{Decoration::Star | Decoration::Color::Black, 1}, {Decoration::Star | Decoration::Color::White, 2}, {Decoration::Stone | Decoration::Color::Black, 2}, {Decoration::Stone | Decoration::Color::White, 1}, {Decoration::Poly | Decoration::Can_Rotate | Decoration::Black, 1}, {Decoration::Poly | Decoration::Black, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.generate( 4, 4, {{{Decoration::Star | Decoration::Color::Black, 1}, {Decoration::Star | Decoration::Color::White, 2}, {Decoration::Stone | Decoration::Color::Black, 2}, {Decoration::Stone | Decoration::Color::White, 1}, {Decoration::Poly | Decoration::Can_Rotate | Decoration::Black, 1}, {Decoration::Poly | Decoration::White, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.generate( 5, 5, {{{Decoration::Star | Decoration::Color::Green, 2}, {Decoration::Star | Decoration::Color::Magenta, 4}, {Decoration::Stone | Decoration::Color::Green, 2}, {Decoration::Stone | Decoration::Color::Magenta, 2}, {Decoration::Poly | Decoration::Can_Rotate | Decoration::Green, 1}, {Decoration::Poly | Decoration::Green, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.setFlag(Generate::BigShapes); generator.generate( 5, 5, {{{Decoration::Star | Decoration::Color::Green, 3}, {Decoration::Star | Decoration::Color::Magenta, 4}, {Decoration::Stone | Decoration::Color::Green, 2}, {Decoration::Stone | Decoration::Color::Magenta, 2}, {Decoration::Poly | Decoration::Can_Rotate | Decoration::Green, 1}, {Decoration::Poly | Decoration::Magenta, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.generate( 5, 5, {{{Decoration::Star | Decoration::Color::Black, 2}, {Decoration::Star | Decoration::Color::White, 3}, {Decoration::Stone | Decoration::Color::Black, 2}, {Decoration::Stone | Decoration::Color::White, 1}, {Decoration::Triangle | Decoration::Color::Black, 2}, {Decoration::Triangle | Decoration::Color::White, 1}, {Decoration::Poly | Decoration::Can_Rotate | Decoration::Black, 1}, {Decoration::Poly | Decoration::White, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.generate( 5, 5, {{{Decoration::Star | Decoration::Color::Black, 3}, {Decoration::Star | Decoration::Color::White, 3}, {Decoration::Stone | Decoration::Color::Black, 1}, {Decoration::Stone | Decoration::Color::White, 1}, {Decoration::Poly | Decoration::Can_Rotate | Decoration::Black, 1}, {Decoration::Poly | Decoration::Can_Rotate | Decoration::White, 1}, {Decoration::Triangle | Decoration::Black, 1}, {Decoration::Triangle | Decoration::White, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 4, 4, {{{Decoration::Star | Decoration::White, 3}, {Decoration::Star | Decoration::Black, 8}, {Decoration::Star | Decoration::Magenta, 6}, {Decoration::Eraser | Decoration::Color::White, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.setFlag(Generate::DisconnectShapes); generator.generate( 4, 4, {{{Decoration::Poly | Decoration::Color::Yellow, 4}, {Decoration::Eraser | Decoration::Color::White, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 4, 4, {{{Decoration::Poly | Decoration::Color::Yellow, 4}, {Decoration::Poly | Decoration::Negative | Decoration::Color::Blue, 1}, {Decoration::Eraser | Decoration::Color::White, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.setFlag(Generate::DisconnectShapes); generator.generate( 4, 4, {{{Decoration::Poly | Decoration::Color::Yellow, 3}, {Decoration::Poly | Decoration::Negative | Decoration::Color::Blue, 1}, {Decoration::Eraser | Decoration::Color::White, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate(4, 4, {{{Decoration::Star | Decoration::Color::Green, 7}, {Decoration::Star | Decoration::Color::Orange, 5}, {Decoration::Eraser | Decoration::Green, 1}, {Decoration::Eraser | Decoration::Orange, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate(5, 5, {{{Decoration::Star | Decoration::Color::Magenta, 8}, {Decoration::Star | Decoration::Color::Orange, 6}, {Decoration::Star | Decoration::Color::Green, 4}, {Decoration::Eraser | Decoration::Magenta, 1}, {Decoration::Eraser | Decoration::Orange, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 4, 4, {{{Decoration::Poly | Decoration::Color::Green, 4}, {Decoration::Eraser | Decoration::Color::White, 2}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.setFlag(Generate::DisconnectShapes); generator.generate( 4, 4, {{{Decoration::Poly | Decoration::Color::Green, 4}, {Decoration::Eraser | Decoration::Color::White, 2}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 4, 4, {{{Decoration::Poly | Decoration::Color::Green, 2}, {Decoration::Poly | Decoration::Color::Magenta, 1}, {Decoration::Star | Decoration::Color::Green, 2}, {Decoration::Star | Decoration::Color::Magenta, 2}, {Decoration::Eraser | Decoration::Color::White, 2}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate(6, 3, {{{Decoration::Star | Decoration::Color::Orange, 4}, {Decoration::Poly | Decoration::Color::Orange, 2}, {Decoration::Poly | Decoration::Negative | Decoration::Color::Magenta, 2}, {Decoration::Eraser | Decoration::White, 2}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate(6, 3, {{{Decoration::Star | Decoration::Color::Magenta, 2}, {Decoration::Star | Decoration::Color::Orange, 3}, {Decoration::Poly | Decoration::Color::Orange, 2}, {Decoration::Poly | Decoration::Negative | Decoration::Color::Magenta, 2}, {Decoration::Eraser | Decoration::White, 2}}}); }, [](Generate& generator) { generator.setFlag(Generate::FalseParity); generator.setSymbol(Decoration::Exit, 0, 0); generator.setSymbol(Decoration::Exit, 16, 0); generator.setSymbol(Decoration::Exit, 0, 16); generator.setSymbol(Decoration::Exit, 16, 16); generator.generate( 8, 8, {{{Decoration::Stone | Decoration::Color::White, 10}, {Decoration::Stone | Decoration::Color::Black, 10}, {Decoration::Dot_Intersection, 81}, {Decoration::Start, 7}, {Decoration::Eraser | Decoration::Color::Purple, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::TreehouseLayout); generator.generate( 4, 5, {{{Decoration::Poly | Decoration::Color::Yellow, 3}, {Decoration::Triangle | Decoration::Color::Orange, 5}, {Decoration::Eraser | Decoration::Color::White, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.generate( 5, 5, {{{Decoration::Poly | Decoration::Color::Yellow, 7}, {Decoration::Stone | Decoration::Color::White, 3}, {Decoration::Stone | Decoration::Color::Black, 3}, {Decoration::Triangle | Decoration::Color::Orange, 6}}}); }, [](Generate& generator) { generator.setSymbol(Decoration::Exit, 10, 0); generator.generate( 5, 5, {{{Decoration::Dot_Intersection, 36}, {Decoration::Triangle1 | Decoration::Color::Orange, 4}, {Decoration::Start, 1}}}); }, [](Generate& generator) { generator.setSymbol(Decoration::Exit, 10, 0); generator.generate( 5, 5, {{{Decoration::Dot_Intersection, 36}, {Decoration::Triangle3 | Decoration::Color::Orange, 6}, {Decoration::Start, 1}}}); }, [](Generate& generator) { generator.setSymbol(Decoration::Exit, 10, 0); generator.generate( 5, 5, {{{Decoration::Dot_Intersection, 36}, {Decoration::Triangle2 | Decoration::Color::Orange, 10}, {Decoration::Start, 1}}}); }, [](Generate& generator) { generator.setSymbol(Decoration::Exit, 10, 0); generator.generate( 5, 5, {{{Decoration::Dot_Intersection, 36}, {Decoration::Triangle | Decoration::Color::Orange, 8}, {Decoration::Start, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.setFlag(Generate::FalseParity); generator.generate( 5, 5, {{{Decoration::Dot_Intersection, 36}, {Decoration::Triangle | Decoration::Color::Orange, 7}, {Decoration::Eraser | Decoration::Color::White, 1}}}); }, [](Generate& generator) { generator.setFlag(Generate::RegularStartEnd); generator.setFlag(Generate::SmallShapes); generator.generate( 5, 5, {{{Decoration::Poly | Decoration::Can_Rotate | Decoration::Color::Orange, 3}, {Decoration::Poly | Decoration::Can_Rotate | Decoration::Color::Magenta, 2}, {Decoration::Star | Decoration::Color::Orange, 4}, {Decoration::Star | Decoration::Color::Magenta, 5}}}); }, }; Generate generator; int choice = Random::rand() % generator_fns.size(); std::cout << "Generate EXPERT: choice " << std::dec << choice << std::endl; generator_fns.at(choice)(generator); Rice::String str(generator.AsCode()); return str; } extern "C" void Init_wittle_generator() { Rice::Class rb_cWittleGenerator = Rice::define_class("WittleGenerator") .define_method("generate_easy", &wittle_generator_generate_easy) .define_method("generate_medium", &wittle_generator_generate_medium) .define_method("generate_expert", &wittle_generator_generate_expert); }