From 4ef2c94a6da2854c0e39a0dc5da682fca2ed4b4d Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Mon, 30 Oct 2023 12:34:05 -0400 Subject: many more puzzles --- ext/wittle_generator/wittle_generator.cpp | 523 +++++++++++++++++++++++++++++- 1 file changed, 519 insertions(+), 4 deletions(-) (limited to 'ext') diff --git a/ext/wittle_generator/wittle_generator.cpp b/ext/wittle_generator/wittle_generator.cpp index f3d2947..11bfffe 100644 --- a/ext/wittle_generator/wittle_generator.cpp +++ b/ext/wittle_generator/wittle_generator.cpp @@ -7,7 +7,7 @@ Rice::Object wittle_generator_generate_easy(Rice::Object /* self */) { Generate generator; - int choice = Random::rand() % 46; + int choice = Random::rand() % 48; std::cout << "Generate EASY: choice " << std::dec << choice << std::endl; switch (choice) { @@ -394,6 +394,23 @@ Rice::Object wittle_generator_generate_easy(Rice::Object /* self */) { {Decoration::Stone | Decoration::Color::Green, 4}}}); break; } + case 46: { + generator.setFlag(Generate::RegularStartEnd); + generator.generate(4, 4, + {{{Decoration::Dot, 6}, + {Decoration::Stone | Decoration::Color::Black, 3}, + {Decoration::Stone | Decoration::Color::White, 3}}}); + break; + } + case 47: { + 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}}}); + break; + } } Rice::String str(generator.AsCode()); @@ -403,7 +420,7 @@ Rice::Object wittle_generator_generate_easy(Rice::Object /* self */) { Rice::Object wittle_generator_generate_medium(Rice::Object /* self */) { Generate generator; - int choice = Random::rand() % 33; + int choice = Random::rand() % 63; std::cout << "Generate MEDIUM: choice " << std::dec << choice << std::endl; switch (choice) { @@ -703,6 +720,276 @@ Rice::Object wittle_generator_generate_medium(Rice::Object /* self */) { {Decoration::Exit, 1}}}); break; } + case 33: { + 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}}}); + break; + } + case 34: { + 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}}}); + break; + } + case 35: { + 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}}}); + break; + } + case 36: { + 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}}}); + break; + } + case 37: { + 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}}}); + break; + } + case 38: { + generator.setFlag(Generate::RegularStartEnd); + generator.generate( + 5, 5, {{{Decoration::Triangle | Decoration::Color::Orange, 10}}}); + break; + } + case 39: { + 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}}}); + break; + } + case 40: { + generator.setFlag(Generate::RegularStartEnd); + generator.generate( + 4, 4, + {{{Decoration::Dot, 25}, + {Decoration::Triangle | Decoration::Color::Orange, 6}}}); + break; + } + case 41: { + generator.setFlag(Generate::RegularStartEnd); + generator.setFlag(Generate::RequireCombineShapes); + generator.setSymmetry(Panel::Rotational); + generator.generate(5, 5, + {{{Decoration::Poly | Decoration::Color::Yellow, 3}}}); + break; + } + case 42: { + generator.setFlag(Generate::RegularStartEnd); + generator.setFlag(Generate::DisconnectShapes); + generator.setFlag(Generate::BigShapes); + generator.generate(5, 5, + {{{Decoration::Poly | Decoration::Color::Yellow, 3}}}); + break; + } + case 43: { + 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}}}); + break; + } + case 44: { + 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}}}); + break; + } + case 45: { + 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}}}); + break; + } + case 46: { + generator.setFlag(Generate::RegularStartEnd); + generator.generate( + 4, 4, + {{{Decoration::Star | Decoration::Color::Orange, 3}, + {Decoration::Triangle | Decoration::Color::Orange, 4}}}); + break; + } + case 47: { + 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}}}); + break; + } + case 48: { + 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}}}); + break; + } + case 49: { + 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}}}); + break; + } + case 50: { + generator.setFlag(Generate::RegularStartEnd); + generator.setFlag(Generate::BigShapes); + generator.generate( + 5, 5, + {{{Decoration::Poly | Decoration::Color::Yellow, 2}, + {Decoration::Triangle | Decoration::Color::Orange, 4}}}); + break; + } + case 51: { + generator.setFlag(Generate::RegularStartEnd); + generator.generate( + 4, 4, + {{{Decoration::Dot, 25}, + {Decoration::Triangle | Decoration::Color::Orange, 4}}}); + break; + } + case 52: { + 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}}}); + break; + } + case 53: { + 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}}}); + break; + } + case 54: { + generator.setFlag(Generate::RegularStartEnd); + generator.generate( + 4, 4, + {{{Decoration::Dot, 25}, + {Decoration::Triangle | Decoration::Color::Orange, 6}}}); + break; + } + case 55: { + generator.setFlag(Generate::RegularStartEnd); + generator.setFlag(Generate::DisconnectShapes); + generator.generate(5, 5, + {{{Decoration::Poly | Decoration::Color::Yellow | + Decoration::Can_Rotate, + 3}}}); + break; + } + case 56: { + 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}}}); + break; + } + case 57: { + 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}}}); + break; + } + case 58: { + generator.setFlag(Generate::RegularStartEnd); + generator.generate(4, 4, + {{{Decoration::Dot_Intersection, 25}, + {Decoration::Poly | Decoration::Color::Yellow, 3}}}); + break; + } + case 59: { + 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}}}); + break; + } + case 60: { + generator.setFlag(Generate::RegularStartEnd); + generator.generate(5, 5, + {{{Decoration::Poly | Decoration::Color::Green, 4}, + {Decoration::Star | Decoration::Color::Green, 3}}}); + break; + } + case 61: { + generator.setFlag(Generate::RegularStartEnd); + generator.generate( + 4, 4, {{{Decoration::Triangle2 | Decoration::Color::Orange, 12}}}); + break; + } + case 62: { + 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}}}); + break; + } } Rice::String str(generator.AsCode()); @@ -712,7 +999,7 @@ Rice::Object wittle_generator_generate_medium(Rice::Object /* self */) { Rice::Object wittle_generator_generate_expert(Rice::Object /* self */) { Generate generator; - int choice = Random::rand() % 8; + int choice = Random::rand() % 27; std::cout << "Generate EXPERT: choice " << std::dec << choice << std::endl; switch (choice) { @@ -780,7 +1067,8 @@ Rice::Object wittle_generator_generate_expert(Rice::Object /* self */) { {Decoration::Dot | Decoration::Color::Yellow, 2}, {Decoration::Dot, 8}, {Decoration::Eraser | Decoration::Color::Purple, 1}, - {Decoration::Start, 1}}}); + {Decoration::Start, 1}, + {Decoration::Exit, 1}}}); break; } case 6: { @@ -804,6 +1092,233 @@ Rice::Object wittle_generator_generate_expert(Rice::Object /* self */) { {Decoration::Decoration::Eraser | Decoration::Color::Green, 1}}}); break; } + case 8: { + 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}}}); + break; + } + case 9: { + 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}}}); + break; + } + case 10: { + generator.setFlag(Generate::RegularStartEnd); + generator.setSymmetry(Panel::Vertical); + generator.generate(7, 7, + {{{Decoration::Poly | Decoration::Color::Yellow, 5}}}); + break; + } + case 11: { + generator.setFlag(Generate::RegularStartEnd); + generator.setSymmetry(Panel::Rotational); + generator.generate(7, 7, + {{{Decoration::Poly | Decoration::Color::Yellow, 5}}}); + break; + } + case 12: { + 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}}}); + break; + } + case 13: { + 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}}}); + break; + } + case 14: { + 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}}}); + break; + } + case 15: { + 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}}}); + break; + } + case 16: { + 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}}}); + break; + } + case 17: { + 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}}}); + break; + } + case 18: { + 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}}}); + break; + } + case 19: { + 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}}}); + break; + } + case 20: { + 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}}}); + break; + } + case 21: { + 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}}}); + break; + } + case 22: { + 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}}}); + break; + } + case 23: { + 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}}}); + break; + } + case 24: { + 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}}}); + break; + } + case 25: { + generator.setFlag(Generate::StartEdgeOnly); + 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}}}); + break; + } + case 26: { + generator.setFlag(Generate::StartEdgeOnly); + 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}}}); + break; + } } Rice::String str(generator.AsCode()); -- cgit 1.4.1