From 0822404cf75fb6ad04faf55861faaf8330effa59 Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Tue, 14 Jan 2025 19:35:34 -0500 Subject: Split puzzle generators into separate files --- ext/wittle_generator/PuzzlesetHard.cpp | 933 +++++++++++++++++++++++++++++++++ 1 file changed, 933 insertions(+) create mode 100644 ext/wittle_generator/PuzzlesetHard.cpp (limited to 'ext/wittle_generator/PuzzlesetHard.cpp') diff --git a/ext/wittle_generator/PuzzlesetHard.cpp b/ext/wittle_generator/PuzzlesetHard.cpp new file mode 100644 index 0000000..c775d64 --- /dev/null +++ b/ext/wittle_generator/PuzzlesetHard.cpp @@ -0,0 +1,933 @@ +#include "PuzzlesetHard.h" + +#include "Generate.h" + +namespace { + +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); + } + } +} + +} // namespace + +const std::vector>& GetHardPuzzles() { + 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.setGridSize(5, 5); + generator.setSymbol(Decoration::Start, 10, 10); + generator.setSymbol(Decoration::Exit, 0, 0); + generator.generate( + 5, 5, + {{{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}}}); + }, + }; + + return generator_fns; +} -- cgit 1.4.1