Skip to content

Instantly share code, notes, and snippets.

@CyberShadow
Last active November 19, 2022 04:49
Show Gist options
  • Star 10 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save CyberShadow/39f43cf25dac0534f8a9 to your computer and use it in GitHub Desktop.
Save CyberShadow/39f43cf25dac0534f8a9 to your computer and use it in GitHub Desktop.
"Game About Squares" solver and solutions
/solve
*.exe
*.ilk
*.pdb
*.s
*.obj
[submodule "ae"]
path = ae
url = git://github.com/CyberShadow/ae.git
[[{"type":"fixture","x":0,"y":2,"o":{"type":"circle"},"color":0},{"type":"block","x":0,"y":0,"color":0,"o":{"type":"arrow","direction":"down"}}],[{"type":"fixture","x":0,"y":1,"o":{"type":"circle"},"color":1},{"type":"fixture","x":0,"y":2,"o":{"type":"circle"},"color":0},{"type":"block","x":0,"y":0,"color":1,"o":{"type":"arrow","direction":"down"}},{"type":"block","x":0,"y":3,"color":0,"o":{"type":"arrow","direction":"up"}}],[{"type":"fixture","x":2,"y":0,"o":{"type":"circle"},"color":0},{"type":"fixture","x":1,"y":0,"o":{"type":"circle"},"color":1},{"type":"fixture","x":1,"y":1,"o":{"type":"circle"},"color":2},{"type":"block","x":0,"y":0,"color":0,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":1,"y":2,"color":1,"o":{"type":"arrow","direction":"up"}},{"type":"block","x":3,"y":1,"color":2,"o":{"type":"arrow","direction":"left"}}],[{"type":"fixture","x":0,"y":3,"o":{"type":"circle"},"color":0},{"type":"fixture","x":2,"y":5,"o":{"type":"circle"},"color":1},{"type":"block","x":2,"y":0,"color":1,"o":{"type":"arrow","direction":"down"}},{"type":"block","x":4,"y":2,"color":0,"o":{"type":"arrow","direction":"left"}}],[{"type":"fixture","x":1,"y":1,"o":{"type":"circle"},"color":0},{"type":"fixture","x":2,"y":2,"o":{"type":"circle"},"color":2},{"type":"fixture","x":3,"y":3,"o":{"type":"circle"},"color":1},{"type":"block","x":0,"y":1,"color":1,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":1,"y":0,"color":0,"o":{"type":"arrow","direction":"down"}},{"type":"block","x":2,"y":1,"color":2,"o":{"type":"arrow","direction":"down"}}],[{"type":"fixture","x":1,"y":1,"o":{"type":"circle"},"color":0},{"type":"fixture","x":2,"y":2,"o":{"type":"circle"},"color":1},{"type":"fixture","x":3,"y":3,"o":{"type":"circle"},"color":2},{"type":"block","x":0,"y":1,"color":1,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":1,"y":0,"color":0,"o":{"type":"arrow","direction":"down"}},{"type":"block","x":2,"y":1,"color":2,"o":{"type":"arrow","direction":"down"}}],[{"type":"fixture","x":0,"y":0,"o":{"type":"circle"},"color":2},{"type":"fixture","x":1,"y":1,"o":{"type":"circle"},"color":1},{"type":"fixture","x":2,"y":3,"o":{"type":"circle"},"color":0},{"type":"block","x":2,"y":2,"color":2,"o":{"type":"arrow","direction":"up"}},{"type":"block","x":4,"y":1,"color":1,"o":{"type":"arrow","direction":"left"}},{"type":"block","x":3,"y":0,"color":0,"o":{"type":"arrow","direction":"down"}}],[{"type":"fixture","x":0,"y":2,"o":{"type":"arrow","direction":"right"},"color":-1},{"type":"fixture","x":2,"y":2,"o":{"type":"arrow","direction":"up"},"color":-1},{"type":"fixture","x":2,"y":0,"o":{"type":"circle"},"color":1},{"type":"block","x":0,"y":0,"color":1,"o":{"type":"arrow","direction":"down"}}],[{"type":"fixture","x":0,"y":2,"o":{"type":"arrow","direction":"right"},"color":-1},{"type":"fixture","x":2,"y":2,"o":{"type":"arrow","direction":"up"},"color":-1},{"type":"fixture","x":2,"y":0,"o":{"type":"circle"},"color":3},{"type":"fixture","x":3,"y":0,"o":{"type":"circle"},"color":2},{"type":"block","x":0,"y":0,"color":3,"o":{"type":"arrow","direction":"down"}},{"type":"block","x":0,"y":2,"color":2,"o":{"type":"arrow","direction":"right"}}],[{"type":"fixture","x":3,"y":1,"o":{"type":"arrow","direction":"left"},"color":-1},{"type":"fixture","x":0,"y":1,"o":{"type":"arrow","direction":"right"},"color":-1},{"type":"fixture","x":2,"y":1,"o":{"type":"arrow","direction":"up"},"color":-1},{"type":"fixture","x":1,"y":0,"o":{"type":"circle"},"color":3},{"type":"fixture","x":2,"y":0,"o":{"type":"circle"},"color":1},{"type":"block","x":0,"y":1,"color":3,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":2,"y":1,"color":1,"o":{"type":"arrow","direction":"right"}}],[{"type":"fixture","x":2,"y":2,"o":{"type":"arrow","direction":"right"},"color":-1},{"type":"fixture","x":0,"y":2,"o":{"type":"circle"},"color":2},{"type":"fixture","x":1,"y":2,"o":{"type":"circle"},"color":0},{"type":"fixture","x":3,"y":2,"o":{"type":"circle"},"color":1},{"type":"block","x":2,"y":0,"color":0,"o":{"type":"arrow","direction":"down"}},{"type":"block","x":4,"y":2,"color":1,"o":{"type":"arrow","direction":"left"}},{"type":"block","x":2,"y":4,"color":2,"o":{"type":"arrow","direction":"up"}}],[{"type":"fixture","x":2,"y":0,"o":{"type":"arrow","direction":"down"},"color":-1},{"type":"fixture","x":1,"y":2,"o":{"type":"circle"},"color":0},{"type":"fixture","x":2,"y":2,"o":{"type":"circle"},"color":1},{"type":"fixture","x":3,"y":2,"o":{"type":"circle"},"color":2},{"type":"block","x":0,"y":0,"color":0,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":4,"y":0,"color":1,"o":{"type":"arrow","direction":"left"}},{"type":"block","x":2,"y":4,"color":2,"o":{"type":"arrow","direction":"up"}}],[{"type":"fixture","x":1,"y":0,"o":{"type":"arrow","direction":"down"},"color":-1},{"type":"fixture","x":3,"y":1,"o":{"type":"arrow","direction":"left"},"color":-1},{"type":"fixture","x":1,"y":2,"o":{"type":"circle"},"color":3},{"type":"fixture","x":1,"y":1,"o":{"type":"circle"},"color":2},{"type":"block","x":0,"y":2,"color":3,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":2,"y":3,"color":2,"o":{"type":"arrow","direction":"up"}}],[{"type":"fixture","x":1,"y":1,"o":{"type":"arrow","direction":"down"},"color":-1},{"type":"fixture","x":0,"y":4,"o":{"type":"circle"},"color":3},{"type":"fixture","x":1,"y":0,"o":{"type":"circle"},"color":2},{"type":"fixture","x":1,"y":2,"o":{"type":"circle"},"color":1},{"type":"block","x":3,"y":3,"color":3,"o":{"type":"arrow","direction":"left"}},{"type":"block","x":1,"y":1,"color":2,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":2,"y":5,"color":1,"o":{"type":"arrow","direction":"up"}}],[{"type":"fixture","x":0,"y":0,"o":{"type":"circle"},"color":0},{"type":"fixture","x":1,"y":1,"o":{"type":"circle"},"color":1},{"type":"fixture","x":2,"y":2,"o":{"type":"circle"},"color":2},{"type":"fixture","x":2,"y":0,"o":{"type":"circle"},"color":3},{"type":"block","x":1,"y":0,"color":2,"o":{"type":"arrow","direction":"down"}},{"type":"block","x":0,"y":1,"color":3,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":2,"y":1,"color":0,"o":{"type":"arrow","direction":"left"}},{"type":"block","x":1,"y":2,"color":1,"o":{"type":"arrow","direction":"up"}}],[{"type":"fixture","x":0,"y":0,"o":{"type":"arrow","direction":"down"},"color":-1},{"type":"fixture","x":0,"y":1,"o":{"type":"arrow","direction":"right"},"color":-1},{"type":"fixture","x":3,"y":0,"o":{"type":"arrow","direction":"left"},"color":-1},{"type":"fixture","x":1,"y":1,"o":{"type":"circle"},"color":0},{"type":"fixture","x":1,"y":2,"o":{"type":"circle"},"color":1},{"type":"block","x":0,"y":0,"color":0,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":2,"y":2,"color":1,"o":{"type":"arrow","direction":"up"}}],[{"type":"fixture","x":0,"y":0,"o":{"type":"arrow","direction":"right"},"color":-1},{"type":"fixture","x":2,"y":0,"o":{"type":"arrow","direction":"down"},"color":-1},{"type":"fixture","x":2,"y":1,"o":{"type":"arrow","direction":"left"},"color":-1},{"type":"fixture","x":1,"y":2,"o":{"type":"arrow","direction":"up"},"color":-1},{"type":"fixture","x":0,"y":1,"o":{"type":"circle"},"color":0},{"type":"fixture","x":3,"y":1,"o":{"type":"circle"},"color":1},{"type":"block","x":0,"y":0,"color":0,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":2,"y":1,"color":1,"o":{"type":"arrow","direction":"right"}}],[{"type":"fixture","x":0,"y":0,"o":{"type":"arrow","direction":"down"},"color":-1},{"type":"fixture","x":0,"y":1,"o":{"type":"arrow","direction":"right"},"color":-1},{"type":"fixture","x":3,"y":0,"o":{"type":"arrow","direction":"left"},"color":-1},{"type":"fixture","x":2,"y":2,"o":{"type":"arrow","direction":"up"},"color":-1},{"type":"fixture","x":1,"y":1,"o":{"type":"circle"},"color":0},{"type":"fixture","x":2,"y":1,"o":{"type":"circle"},"color":2},{"type":"fixture","x":3,"y":1,"o":{"type":"circle"},"color":1},{"type":"block","x":0,"y":0,"color":0,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":3,"y":0,"color":1,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":0,"y":1,"color":2,"o":{"type":"arrow","direction":"right"}}],[{"type":"fixture","x":0,"y":0,"o":{"type":"arrow","direction":"down"},"color":-1},{"type":"fixture","x":0,"y":1,"o":{"type":"arrow","direction":"right"},"color":-1},{"type":"fixture","x":3,"y":0,"o":{"type":"arrow","direction":"left"},"color":-1},{"type":"fixture","x":2,"y":2,"o":{"type":"arrow","direction":"up"},"color":-1},{"type":"fixture","x":1,"y":1,"o":{"type":"circle"},"color":0},{"type":"fixture","x":2,"y":1,"o":{"type":"circle"},"color":2},{"type":"fixture","x":3,"y":1,"o":{"type":"circle"},"color":1},{"type":"block","x":0,"y":0,"color":2,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":3,"y":0,"color":1,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":0,"y":1,"color":0,"o":{"type":"arrow","direction":"right"}}],[{"type":"fixture","x":2,"y":-1,"o":{"type":"circle"},"color":0},{"type":"fixture","x":2,"y":1,"o":{"type":"circle"},"color":1},{"type":"fixture","x":2,"y":3,"o":{"type":"circle"},"color":2},{"type":"fixture","x":0,"y":2,"o":{"type":"arrow","direction":"down"},"color":-1},{"type":"fixture","x":3,"y":3,"o":{"type":"arrow","direction":"left"},"color":-1},{"type":"fixture","x":2,"y":4,"o":{"type":"arrow","direction":"up"},"color":-1},{"type":"fixture","x":0,"y":5,"o":{"type":"arrow","direction":"right"},"color":-1},{"type":"fixture","x":3,"y":5,"o":{"type":"arrow","direction":"up"},"color":-1},{"type":"fixture","x":1,"y":3,"o":{"type":"arrow","direction":"down"},"color":-1},{"type":"fixture","x":1,"y":4,"o":{"type":"arrow","direction":"right"},"color":-1},{"type":"block","x":0,"y":2,"color":0,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":2,"y":4,"color":2,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":1,"y":3,"color":1,"o":{"type":"arrow","direction":"right"}}],[{"type":"fixture","x":0,"y":0,"o":{"type":"arrow","direction":"down"},"color":-1},{"type":"fixture","x":0,"y":2,"o":{"type":"arrow","direction":"right"},"color":-1},{"type":"fixture","x":2,"y":0,"o":{"type":"arrow","direction":"left"},"color":-1},{"type":"fixture","x":0,"y":4,"o":{"type":"arrow","direction":"up"},"color":-1},{"type":"fixture","x":2,"y":2,"o":{"type":"arrow","direction":"up"},"color":-1},{"type":"fixture","x":1,"y":0,"o":{"type":"circle"},"color":4},{"type":"fixture","x":0,"y":1,"o":{"type":"circle"},"color":2},{"type":"fixture","x":1,"y":2,"o":{"type":"circle"},"color":6},{"type":"fixture","x":2,"y":1,"o":{"type":"circle"},"color":7},{"type":"block","x":0,"y":0,"color":2,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":0,"y":2,"color":4,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":2,"y":2,"color":7,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":2,"y":0,"color":6,"o":{"type":"arrow","direction":"right"}}],[{"type":"fixture","x":2,"y":0,"o":{"type":"arrow","direction":"left"},"color":-1},{"type":"fixture","x":0,"y":0,"o":{"type":"arrow","direction":"down"},"color":-1},{"type":"fixture","x":2,"y":4,"o":{"type":"arrow","direction":"up"},"color":-1},{"type":"fixture","x":0,"y":2,"o":{"type":"arrow","direction":"up"},"color":-1},{"type":"fixture","x":0,"y":3,"o":{"type":"arrow","direction":"down"},"color":-1},{"type":"fixture","x":0,"y":4,"o":{"type":"arrow","direction":"right"},"color":-1},{"type":"fixture","x":2,"y":2,"o":{"type":"circle"},"color":10},{"type":"fixture","x":2,"y":3,"o":{"type":"circle"},"color":12},{"type":"fixture","x":2,"y":1,"o":{"type":"circle"},"color":9},{"type":"fixture","x":0,"y":1,"o":{"type":"circle"},"color":11},{"type":"block","x":0,"y":4,"color":9,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":2,"y":4,"color":10,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":0,"y":0,"color":11,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":2,"y":0,"color":12,"o":{"type":"arrow","direction":"right"}}],[{"type":"fixture","x":0,"y":2,"o":{"type":"arrow","direction":"right"},"color":-1},{"type":"fixture","x":1,"y":0,"o":{"type":"arrow","direction":"down"},"color":-1},{"type":"fixture","x":1,"y":4,"o":{"type":"arrow","direction":"up"},"color":-1},{"type":"fixture","x":4,"y":3,"o":{"type":"arrow","direction":"left"},"color":-1},{"type":"fixture","x":2,"y":0,"o":{"type":"circle"},"color":0},{"type":"block","x":0,"y":2,"color":0,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":1,"y":0,"color":1,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":4,"y":1,"color":2,"o":{"type":"arrow","direction":"down"}}],[{"type":"fixture","x":0,"y":2,"o":{"type":"arrow","direction":"right"},"color":-1},{"type":"fixture","x":4,"y":1,"o":{"type":"arrow","direction":"left"},"color":-1},{"type":"fixture","x":2,"y":0,"o":{"type":"arrow","direction":"down"},"color":-1},{"type":"fixture","x":2,"y":4,"o":{"type":"arrow","direction":"up"},"color":-1},{"type":"fixture","x":1,"y":3,"o":{"type":"circle"},"color":0},{"type":"fixture","x":2,"y":3,"o":{"type":"circle"},"color":1},{"type":"fixture","x":3,"y":3,"o":{"type":"circle"},"color":2},{"type":"block","x":1,"y":0,"color":1,"o":{"type":"arrow","direction":"down"}},{"type":"block","x":0,"y":2,"color":2,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":4,"y":1,"color":0,"o":{"type":"arrow","direction":"right"}}],[{"type":"fixture","x":0,"y":0,"o":{"type":"circle"},"color":0},{"type":"fixture","x":1,"y":1,"o":{"type":"circle"},"color":1},{"type":"fixture","x":2,"y":2,"o":{"type":"circle"},"color":2},{"type":"fixture","x":0,"y":2,"o":{"type":"arrow","direction":"down"},"color":-1},{"type":"fixture","x":3,"y":3,"o":{"type":"arrow","direction":"left"},"color":-1},{"type":"fixture","x":2,"y":4,"o":{"type":"arrow","direction":"up"},"color":-1},{"type":"fixture","x":0,"y":5,"o":{"type":"arrow","direction":"right"},"color":-1},{"type":"fixture","x":3,"y":5,"o":{"type":"arrow","direction":"up"},"color":-1},{"type":"fixture","x":1,"y":3,"o":{"type":"arrow","direction":"down"},"color":-1},{"type":"fixture","x":1,"y":4,"o":{"type":"arrow","direction":"right"},"color":-1},{"type":"block","x":0,"y":2,"color":0,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":2,"y":4,"color":2,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":1,"y":3,"color":1,"o":{"type":"arrow","direction":"right"}}],[{"type":"fixture","x":0,"y":0,"o":{"type":"circle"},"color":0},{"type":"fixture","x":1,"y":0,"o":{"type":"circle"},"color":1},{"type":"fixture","x":2,"y":0,"o":{"type":"circle"},"color":2},{"type":"fixture","x":0,"y":1,"o":{"type":"arrow","direction":"down"},"color":-1},{"type":"fixture","x":0,"y":3,"o":{"type":"arrow","direction":"right"},"color":-1},{"type":"fixture","x":2,"y":3,"o":{"type":"arrow","direction":"up"},"color":-1},{"type":"fixture","x":3,"y":1,"o":{"type":"arrow","direction":"left"},"color":-1},{"type":"block","x":0,"y":1,"color":1,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":0,"y":3,"color":2,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":2,"y":3,"color":0,"o":{"type":"arrow","direction":"right"}}],[{"type":"fixture","x":1,"y":0,"o":{"type":"arrow","direction":"down"},"color":-1},{"type":"fixture","x":0,"y":2,"o":{"type":"arrow","direction":"right"},"color":-1},{"type":"fixture","x":3,"y":1,"o":{"type":"arrow","direction":"left"},"color":-1},{"type":"fixture","x":2,"y":3,"o":{"type":"arrow","direction":"up"},"color":-1},{"type":"fixture","x":0,"y":1,"o":{"type":"circle"},"color":1},{"type":"fixture","x":2,"y":0,"o":{"type":"circle"},"color":3},{"type":"fixture","x":3,"y":2,"o":{"type":"circle"},"color":2},{"type":"fixture","x":1,"y":3,"o":{"type":"circle"},"color":0},{"type":"block","x":0,"y":2,"color":1,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":2,"y":3,"color":0,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":3,"y":1,"color":2,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":1,"y":0,"color":3,"o":{"type":"arrow","direction":"right"}}],[{"type":"fixture","x":0,"y":2,"o":{"type":"arrow","direction":"right"},"color":-1},{"type":"fixture","x":4,"y":1,"o":{"type":"arrow","direction":"left"},"color":-1},{"type":"fixture","x":3,"y":0,"o":{"type":"arrow","direction":"down"},"color":-1},{"type":"fixture","x":3,"y":4,"o":{"type":"arrow","direction":"up"},"color":-1},{"type":"fixture","x":1,"y":3,"o":{"type":"circle"},"color":0},{"type":"fixture","x":2,"y":3,"o":{"type":"circle"},"color":1},{"type":"fixture","x":3,"y":3,"o":{"type":"circle"},"color":2},{"type":"block","x":1,"y":0,"color":2,"o":{"type":"arrow","direction":"down"}},{"type":"block","x":0,"y":2,"color":0,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":4,"y":1,"color":1,"o":{"type":"arrow","direction":"right"}}],[{"type":"fixture","x":0,"y":2,"o":{"type":"arrow","direction":"right"},"color":-1},{"type":"fixture","x":1,"y":0,"o":{"type":"arrow","direction":"down"},"color":-1},{"type":"fixture","x":1,"y":4,"o":{"type":"arrow","direction":"up"},"color":-1},{"type":"fixture","x":4,"y":3,"o":{"type":"arrow","direction":"left"},"color":-1},{"type":"fixture","x":0,"y":1,"o":{"type":"circle"},"color":1},{"type":"block","x":0,"y":2,"color":0,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":1,"y":0,"color":1,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":4,"y":1,"color":2,"o":{"type":"arrow","direction":"down"}}],[{"type":"fixture","x":2,"y":0,"o":{"type":"arrow","direction":"down"},"color":-1},{"type":"fixture","x":4,"y":2,"o":{"type":"arrow","direction":"left"},"color":-1},{"type":"fixture","x":2,"y":4,"o":{"type":"arrow","direction":"up"},"color":-1},{"type":"fixture","x":2,"y":1,"o":{"type":"circle"},"color":0},{"type":"fixture","x":3,"y":2,"o":{"type":"circle"},"color":1},{"type":"fixture","x":2,"y":3,"o":{"type":"circle"},"color":2},{"type":"fixture","x":1,"y":2,"o":{"type":"circle"},"color":3},{"type":"block","x":2,"y":0,"color":1,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":4,"y":2,"color":2,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":2,"y":4,"color":3,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":0,"y":2,"color":0,"o":{"type":"arrow","direction":"right"}}],[{"type":"fixture","x":0,"y":0,"o":{"type":"arrow","direction":"down"},"color":-1},{"type":"fixture","x":3,"y":0,"o":{"type":"arrow","direction":"left"},"color":-1},{"type":"fixture","x":0,"y":3,"o":{"type":"arrow","direction":"right"},"color":-1},{"type":"fixture","x":2,"y":3,"o":{"type":"arrow","direction":"up"},"color":-1},{"type":"fixture","x":0,"y":2,"o":{"type":"circle"},"color":0},{"type":"fixture","x":0,"y":1,"o":{"type":"circle"},"color":1},{"type":"fixture","x":1,"y":0,"o":{"type":"circle"},"color":2},{"type":"block","x":2,"y":3,"color":1,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":0,"y":3,"color":0,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":0,"y":0,"color":2,"o":{"type":"arrow","direction":"right"}}],[{"type":"fixture","x":1,"y":1,"o":{"type":"arrow","direction":"right"},"color":-1},{"type":"fixture","x":3,"y":2,"o":{"type":"arrow","direction":"left"},"color":-1},{"type":"fixture","x":2,"y":0,"o":{"type":"arrow","direction":"down"},"color":-1},{"type":"fixture","x":2,"y":4,"o":{"type":"arrow","direction":"up"},"color":-1},{"type":"fixture","x":0,"y":2,"o":{"type":"circle"},"color":1},{"type":"fixture","x":2,"y":2,"o":{"type":"circle"},"color":0},{"type":"fixture","x":4,"y":2,"o":{"type":"circle"},"color":2},{"type":"block","x":2,"y":0,"color":1,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":1,"y":1,"color":2,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":3,"y":2,"color":0,"o":{"type":"arrow","direction":"right"}}],[{"type":"fixture","x":0,"y":2,"o":{"type":"arrow","direction":"right"},"color":-1},{"type":"fixture","x":1,"y":0,"o":{"type":"arrow","direction":"down"},"color":-1},{"type":"fixture","x":1,"y":4,"o":{"type":"arrow","direction":"up"},"color":-1},{"type":"fixture","x":4,"y":3,"o":{"type":"arrow","direction":"left"},"color":-1},{"type":"fixture","x":2,"y":0,"o":{"type":"circle"},"color":0},{"type":"fixture","x":0,"y":1,"o":{"type":"circle"},"color":1},{"type":"block","x":0,"y":2,"color":0,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":1,"y":0,"color":1,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":4,"y":1,"color":2,"o":{"type":"arrow","direction":"down"}}],[{"type":"fixture","x":0,"y":0,"o":{"type":"circle"},"color":1},{"type":"fixture","x":1,"y":0,"o":{"type":"circle"},"color":0},{"type":"fixture","x":2,"y":0,"o":{"type":"circle"},"color":2},{"type":"fixture","x":1,"y":1,"o":{"type":"arrow","direction":"down"},"color":-1},{"type":"fixture","x":1,"y":3,"o":{"type":"arrow","direction":"right"},"color":-1},{"type":"fixture","x":3,"y":3,"o":{"type":"arrow","direction":"up"},"color":-1},{"type":"fixture","x":4,"y":1,"o":{"type":"arrow","direction":"left"},"color":-1},{"type":"block","x":1,"y":1,"color":1,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":1,"y":3,"color":2,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":3,"y":3,"color":0,"o":{"type":"arrow","direction":"right"}}],[{"type":"fixture","x":0,"y":0,"o":{"type":"arrow","direction":"down"},"color":-1},{"type":"fixture","x":0,"y":1,"o":{"type":"arrow","direction":"right"},"color":-1},{"type":"fixture","x":3,"y":0,"o":{"type":"arrow","direction":"left"},"color":-1},{"type":"fixture","x":2,"y":2,"o":{"type":"arrow","direction":"up"},"color":-1},{"type":"fixture","x":1,"y":2,"o":{"type":"circle"},"color":2},{"type":"fixture","x":2,"y":1,"o":{"type":"circle"},"color":0},{"type":"fixture","x":3,"y":2,"o":{"type":"circle"},"color":1},{"type":"block","x":0,"y":0,"color":2,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":3,"y":0,"color":1,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":0,"y":1,"color":0,"o":{"type":"arrow","direction":"right"}}],[{"type":"fixture","x":1,"y":0,"o":{"type":"arrow","direction":"down"},"color":-1},{"type":"fixture","x":0,"y":3,"o":{"type":"arrow","direction":"right"},"color":-1},{"type":"fixture","x":3,"y":4,"o":{"type":"arrow","direction":"up"},"color":-1},{"type":"fixture","x":4,"y":1,"o":{"type":"arrow","direction":"left"},"color":-1},{"type":"fixture","x":2,"y":0,"o":{"type":"circle"},"color":2},{"type":"fixture","x":3,"y":0,"o":{"type":"circle"},"color":0},{"type":"fixture","x":4,"y":0,"o":{"type":"circle"},"color":3},{"type":"block","x":2,"y":4,"color":2,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":0,"y":4,"color":3,"o":{"type":"arrow","direction":"right"}},{"type":"block","x":1,"y":4,"color":0,"o":{"type":"arrow","direction":"right"}}]]
Found solution for level 0 in 2 steps:
* Click red block to move it down to 0,1
* Click red block to move it down to 0,2
Found solution for level 1 in 2 steps:
* Click red block to move it up to 0,2
* Click blue block to move it down to 0,1
Found solution for level 2 in 6 steps:
* Click blue block to move it up to 1,1
* Click red block to move it right to 1,0
* Click red block to move it right to 2,0
* Click blue block to move it up to 1,0
* Click indigo block to move it left to 2,1
* Click indigo block to move it left to 1,1
Found solution for level 3 in 9 steps:
* Click red block to move it left to 3,2
* Click red block to move it left to 2,2
* Click blue block to move it down to 2,1
* Click blue block to move it down to 2,2
* Click red block to move it left to 1,3
* Click red block to move it left to 0,3
* Click blue block to move it down to 2,3
* Click blue block to move it down to 2,4
* Click blue block to move it down to 2,5
Found solution for level 4 in 5 steps:
* Click blue block to move it right to 1,1
* Click red block to move it down to 1,1
* Click blue block to move it right to 2,2
* Click indigo block to move it down to 2,2
* Click blue block to move it right to 3,3
Found solution for level 5 in 5 steps:
* Click indigo block to move it down to 2,2
* Click blue block to move it right to 1,1
* Click red block to move it down to 1,1
* Click blue block to move it right to 2,2
* Click indigo block to move it down to 3,3
Found solution for level 6 in 8 steps:
* Click indigo block to move it up to 2,1
* Click red block to move it down to 3,1
* Click blue block to move it left to 3,1
* Click red block to move it down to 2,2
* Click blue block to move it left to 2,1
* Click blue block to move it left to 1,1
* Click indigo block to move it up to 0,0
* Click red block to move it down to 2,3
Found solution for level 7 in 6 steps:
* Click blue block to move it down to 0,1
* Click blue block to move it down to 0,2
* Click blue block to move it right to 1,2
* Click blue block to move it right to 2,2
* Click blue block to move it up to 2,1
* Click blue block to move it up to 2,0
Found solution for level 8 in 9 steps:
* Click indigo block to move it right to 1,2
* Click orange block to move it down to 0,1
* Click orange block to move it down to 0,2
* Click orange block to move it right to 1,2
* Click orange block to move it right to 2,2
* Click orange block to move it up to 2,1
* Click orange block to move it up to 2,0
* Click indigo block to move it up to 3,1
* Click indigo block to move it up to 3,0
Found solution for level 9 in 5 steps:
* Click orange block to move it right to 1,1
* Click orange block to move it right to 2,1
* Click blue block to move it left to 2,1
* Click orange block to move it up to 1,0
* Click blue block to move it up to 2,0
Found solution for level 10 in 8 steps:
* Click indigo block to move it up to 2,3
* Click red block to move it down to 2,1
* Click red block to move it down to 2,2
* Click red block to move it right to 3,2
* Click indigo block to move it up to 2,2
* Click blue block to move it left to 3,2
* Click blue block to move it left to 2,2
* Click blue block to move it right to 3,2
Found solution for level 11 in 14 steps:
* Click indigo block to move it up to 2,3
* Click indigo block to move it up to 2,2
* Click indigo block to move it up to 2,1
* Click indigo block to move it up to 2,0
* Click red block to move it right to 1,0
* Click red block to move it right to 2,0
* Click indigo block to move it down to 3,1
* Click blue block to move it left to 3,0
* Click blue block to move it left to 2,0
* Click indigo block to move it down to 3,2
* Click blue block to move it down to 2,1
* Click blue block to move it down to 2,2
* Click red block to move it down to 1,1
* Click red block to move it down to 1,2
Found solution for level 12 in 9 steps:
* Click orange block to move it right to 1,2
* Click orange block to move it right to 2,2
* Click indigo block to move it up to 2,2
* Click orange block to move it right to 3,1
* Click indigo block to move it up to 2,1
* Click orange block to move it left to 2,1
* Click indigo block to move it up to 1,0
* Click orange block to move it left to 1,1
* Click indigo block to move it down to 1,1
Found solution for level 13 in 10 steps:
* Click blue block to move it up to 2,4
* Click blue block to move it up to 2,3
* Click orange block to move it left to 2,3
* Click blue block to move it up to 1,2
* Click orange block to move it left to 1,3
* Click indigo block to move it down to 1,2
* Click orange block to move it left to 0,4
* Click blue block to move it up to 1,2
* Click blue block to move it up to 1,1
* Click blue block to move it down to 1,2
Found solution for level 14 in 8 steps:
* Click red block to move it left to 1,1
* Click indigo block to move it down to 1,1
* Click orange block to move it right to 1,1
* Click blue block to move it up to 1,2
* Click orange block to move it right to 2,0
* Click blue block to move it up to 1,1
* Click red block to move it left to 0,0
* Click indigo block to move it down to 2,2
Found solution for level 15 in 13 steps:
* Click red block to move it down to 0,1
* Click red block to move it right to 1,1
* Click red block to move it right to 2,1
* Click blue block to move it up to 2,1
* Click red block to move it right to 3,0
* Click blue block to move it up to 2,0
* Click red block to move it left to 2,0
* Click red block to move it left to 1,0
* Click blue block to move it down to 0,1
* Click red block to move it left to 0,0
* Click red block to move it down to 0,1
* Click blue block to move it right to 1,2
* Click red block to move it right to 1,1
Found solution for level 16 in 14 steps:
* Click red block to move it right to 1,0
* Click red block to move it right to 2,0
* Click red block to move it down to 2,1
* Click red block to move it left to 1,1
* Click blue block to move it left to 1,2
* Click blue block to move it up to 1,1
* Click red block to move it left to 0,0
* Click blue block to move it up to 1,0
* Click red block to move it right to 1,0
* Click red block to move it right to 2,0
* Click red block to move it down to 2,1
* Click red block to move it left to 1,1
* Click red block to move it left to 0,1
* Click blue block to move it down to 3,1
Found solution for level 17 in 19 steps:
* Click blue block to move it left to 2,0
* Click blue block to move it left to 1,0
* Click red block to move it down to 0,1
* Click indigo block to move it right to 1,2
* Click indigo block to move it right to 2,2
* Click red block to move it right to 1,1
* Click red block to move it right to 2,1
* Click indigo block to move it up to 2,1
* Click red block to move it right to 3,0
* Click indigo block to move it up to 2,0
* Click red block to move it left to 2,0
* Click blue block to move it down to 0,1
* Click red block to move it left to 1,0
* Click blue block to move it right to 1,1
* Click indigo block to move it down to 0,1
* Click red block to move it left to 0,0
* Click indigo block to move it right to 1,1
* Click red block to move it down to 0,1
* Click red block to move it right to 1,1
Found solution for level 18 in 18 steps:
* Click blue block to move it left to 2,0
* Click blue block to move it left to 1,0
* Click indigo block to move it down to 0,1
* Click blue block to move it left to 0,0
* Click red block to move it right to 1,2
* Click blue block to move it down to 0,1
* Click indigo block to move it right to 1,2
* Click indigo block to move it right to 2,2
* Click red block to move it up to 3,1
* Click red block to move it up to 3,0
* Click red block to move it left to 2,0
* Click red block to move it left to 1,0
* Click red block to move it left to 0,0
* Click blue block to move it right to 1,1
* Click red block to move it down to 0,1
* Click red block to move it right to 1,1
* Click blue block to move it right to 3,1
* Click indigo block to move it up to 2,1
Found solution for level 19 in 27 steps:
* Click red block to move it down to 0,3
* Click red block to move it down to 0,4
* Click red block to move it down to 0,5
* Click red block to move it right to 1,5
* Click red block to move it right to 2,5
* Click red block to move it right to 3,5
* Click red block to move it up to 3,4
* Click red block to move it up to 3,3
* Click red block to move it left to 2,3
* Click blue block to move it down to 1,4
* Click red block to move it left to 1,3
* Click blue block to move it right to 2,4
* Click blue block to move it up to 2,3
* Click indigo block to move it up to 3,3
* Click red block to move it down to 1,4
* Click indigo block to move it left to 2,3
* Click red block to move it right to 2,4
* Click blue block to move it down to 1,4
* Click indigo block to move it left to 1,3
* Click red block to move it up to 2,3
* Click blue block to move it right to 2,4
* Click blue block to move it up to 2,3
* Click indigo block to move it down to 1,4
* Click indigo block to move it right to 2,4
* Click indigo block to move it up to 2,3
* Click blue block to move it up to 2,1
* Click red block to move it up to 2,-1
Found solution for level 20 in 23 steps:
* Click purple block to move it left to 1,0
* Click gray block to move it up to 2,1
* Click gray block to move it up to 2,0
* Click indigo block to move it down to 0,1
* Click gray block to move it left to 1,0
* Click purple block to move it down to 0,1
* Click gray block to move it left to 0,0
* Click indigo block to move it right to 1,2
* Click gray block to move it down to 0,1
* Click gray block to move it down to 0,2
* Click teal block to move it up to 0,3
* Click gray block to move it right to 1,1
* Click teal block to move it up to 0,2
* Click teal block to move it right to 1,2
* Click indigo block to move it up to 2,1
* Click teal block to move it right to 2,2
* Click teal block to move it up to 2,1
* Click indigo block to move it left to 1,0
* Click teal block to move it up to 2,0
* Click teal block to move it left to 1,0
* Click gray block to move it right to 2,1
* Click indigo block to move it down to 0,1
* Click purple block to move it right to 1,2
Found solution for level 21 in 42 steps:
* Click green block to move it up to 2,3
* Click red block to move it right to 1,4
* Click red block to move it right to 2,4
* Click red block to move it up to 2,3
* Click red block to move it up to 2,2
* Click orange block to move it left to 1,0
* Click red block to move it up to 2,1
* Click brown block to move it down to 0,1
* Click green block to move it left to 1,0
* Click red block to move it up to 2,0
* Click brown block to move it down to 0,2
* Click brown block to move it up to 0,1
* Click brown block to move it up to 0,0
* Click brown block to move it down to 0,1
* Click red block to move it left to 1,0
* Click brown block to move it down to 0,2
* Click brown block to move it up to 0,1
* Click brown block to move it up to 0,0
* Click brown block to move it down to 0,1
* Click red block to move it left to 0,0
* Click orange block to move it down to 0,-1
* Click orange block to move it down to 0,0
* Click orange block to move it down to 0,1
* Click brown block to move it right to 1,4
* Click orange block to move it down to 0,2
* Click red block to move it right to 1,4
* Click brown block to move it up to 2,3
* Click green block to move it down to 0,4
* Click green block to move it right to 1,4
* Click red block to move it up to 2,3
* Click green block to move it right to 2,4
* Click green block to move it up to 2,3
* Click green block to move it up to 2,2
* Click brown block to move it left to 1,0
* Click brown block to move it left to 0,0
* Click brown block to move it down to 0,1
* Click brown block to move it down to 0,2
* Click orange block to move it down to 0,4
* Click orange block to move it right to 1,4
* Click orange block to move it right to 2,4
* Click orange block to move it up to 2,3
* Click brown block to move it up to 0,1
Found solution for level 22 in 15 steps:
* Click indigo block to move it down to 4,2
* Click indigo block to move it down to 4,3
* Click indigo block to move it left to 3,3
* Click indigo block to move it left to 2,3
* Click indigo block to move it left to 1,3
* Click blue block to move it down to 1,1
* Click blue block to move it down to 1,2
* Click blue block to move it down to 1,3
* Click blue block to move it down to 1,4
* Click indigo block to move it up to 1,4
* Click indigo block to move it up to 1,3
* Click red block to move it right to 1,2
* Click indigo block to move it up to 1,2
* Click red block to move it right to 2,1
* Click blue block to move it up to 2,1
Found solution for level 23 in 17 steps:
* Click red block to move it left to 3,1
* Click red block to move it left to 2,1
* Click red block to move it left to 1,1
* Click blue block to move it down to 1,1
* Click blue block to move it down to 1,2
* Click indigo block to move it right to 1,2
* Click blue block to move it down to 2,3
* Click blue block to move it down to 2,4
* Click blue block to move it up to 2,3
* Click blue block to move it up to 2,2
* Click blue block to move it up to 2,1
* Click blue block to move it up to 2,0
* Click indigo block to move it right to 2,2
* Click blue block to move it down to 2,1
* Click blue block to move it down to 2,2
* Click indigo block to move it right to 3,3
* Click blue block to move it down to 2,3
Found solution for level 24 in 17 steps:
* Click blue block to move it down to 1,4
* Click blue block to move it right to 2,4
* Click red block to move it down to 0,3
* Click red block to move it down to 0,4
* Click red block to move it down to 0,5
* Click red block to move it right to 1,5
* Click red block to move it right to 2,5
* Click red block to move it right to 3,5
* Click red block to move it up to 3,4
* Click red block to move it up to 3,3
* Click red block to move it left to 2,3
* Click blue block to move it up to 2,3
* Click blue block to move it up to 2,2
* Click red block to move it left to 1,1
* Click indigo block to move it left to 2,2
* Click blue block to move it up to 1,1
* Click red block to move it left to 0,0
Found solution for level 25 in 23 steps:
* Click red block to move it up to 2,2
* Click indigo block to move it right to 1,3
* Click blue block to move it down to 0,2
* Click blue block to move it down to 0,3
* Click blue block to move it right to 1,3
* Click blue block to move it right to 2,3
* Click indigo block to move it up to 3,2
* Click indigo block to move it up to 3,1
* Click indigo block to move it left to 2,1
* Click indigo block to move it left to 1,1
* Click indigo block to move it left to 0,1
* Click indigo block to move it down to 0,2
* Click indigo block to move it down to 0,3
* Click indigo block to move it right to 1,3
* Click indigo block to move it right to 2,3
* Click indigo block to move it up to 2,2
* Click blue block to move it up to 3,2
* Click blue block to move it up to 3,1
* Click blue block to move it left to 2,1
* Click red block to move it up to 1,0
* Click indigo block to move it up to 2,1
* Click blue block to move it left to 1,0
* Click indigo block to move it up to 2,0
Found solution for level 26 in 20 steps:
* Click red block to move it up to 2,2
* Click orange block to move it down to 1,1
* Click orange block to move it down to 1,2
* Click blue block to move it right to 1,2
* Click orange block to move it down to 2,3
* Click blue block to move it right to 2,2
* Click orange block to move it up to 2,2
* Click indigo block to move it left to 2,1
* Click red block to move it up to 3,1
* Click red block to move it left to 2,1
* Click orange block to move it up to 2,1
* Click red block to move it left to 1,0
* Click orange block to move it up to 2,0
* Click red block to move it down to 1,1
* Click indigo block to move it left to 0,2
* Click red block to move it down to 1,2
* Click red block to move it down to 1,3
* Click indigo block to move it right to 1,2
* Click indigo block to move it right to 2,2
* Click indigo block to move it right to 3,2
Found solution for level 27 in 22 steps:
* Click blue block to move it left to 3,1
* Click blue block to move it left to 2,1
* Click blue block to move it left to 1,1
* Click red block to move it right to 1,2
* Click indigo block to move it down to 1,1
* Click blue block to move it left to 0,2
* Click indigo block to move it down to 1,2
* Click blue block to move it right to 1,2
* Click blue block to move it right to 2,2
* Click indigo block to move it down to 3,3
* Click indigo block to move it down to 3,4
* Click indigo block to move it up to 3,3
* Click blue block to move it right to 3,2
* Click indigo block to move it up to 3,2
* Click blue block to move it right to 4,1
* Click indigo block to move it up to 3,1
* Click indigo block to move it up to 3,0
* Click blue block to move it left to 3,1
* Click indigo block to move it down to 3,1
* Click indigo block to move it down to 3,2
* Click blue block to move it left to 2,3
* Click indigo block to move it down to 3,3
Found solution for level 28 in 17 steps:
* Click indigo block to move it down to 4,2
* Click indigo block to move it down to 4,3
* Click blue block to move it down to 1,1
* Click blue block to move it down to 1,2
* Click red block to move it right to 1,2
* Click red block to move it right to 2,2
* Click red block to move it right to 3,2
* Click blue block to move it down to 4,3
* Click blue block to move it left to 3,3
* Click blue block to move it left to 2,3
* Click blue block to move it left to 1,3
* Click indigo block to move it left to 3,4
* Click indigo block to move it left to 2,4
* Click indigo block to move it left to 1,4
* Click indigo block to move it up to 1,3
* Click indigo block to move it up to 1,2
* Click blue block to move it left to 0,1
Found solution for level 29 in 15 steps:
* Click indigo block to move it left to 3,2
* Click indigo block to move it left to 2,2
* Click indigo block to move it left to 1,2
* Click orange block to move it up to 2,3
* Click blue block to move it down to 2,1
* Click blue block to move it down to 2,2
* Click red block to move it right to 1,2
* Click orange block to move it up to 2,2
* Click orange block to move it up to 2,1
* Click indigo block to move it down to 2,1
* Click indigo block to move it down to 2,2
* Click red block to move it right to 2,2
* Click orange block to move it up to 2,2
* Click blue block to move it left to 3,2
* Click indigo block to move it down to 2,3
Found solution for level 30 in 28 steps:
* Click indigo block to move it down to 0,1
* Click indigo block to move it down to 0,2
* Click red block to move it right to 1,3
* Click indigo block to move it down to 0,3
* Click indigo block to move it right to 1,3
* Click blue block to move it up to 3,2
* Click indigo block to move it right to 2,3
* Click red block to move it up to 3,2
* Click red block to move it up to 3,1
* Click blue block to move it left to 2,0
* Click red block to move it up to 3,0
* Click red block to move it left to 2,0
* Click red block to move it left to 1,0
* Click blue block to move it down to 0,1
* Click blue block to move it down to 0,2
* Click blue block to move it down to 0,3
* Click blue block to move it right to 1,3
* Click blue block to move it right to 2,3
* Click blue block to move it up to 2,2
* Click blue block to move it up to 2,1
* Click blue block to move it up to 2,0
* Click indigo block to move it up to 3,2
* Click indigo block to move it up to 3,1
* Click indigo block to move it up to 3,0
* Click indigo block to move it left to 2,0
* Click red block to move it down to 0,1
* Click indigo block to move it left to 1,0
* Click blue block to move it down to 0,1
Found solution for level 31 in 21 steps:
* Click indigo block to move it right to 2,1
* Click blue block to move it down to 2,1
* Click red block to move it left to 2,2
* Click blue block to move it down to 2,2
* Click blue block to move it down to 2,3
* Click red block to move it up to 2,3
* Click indigo block to move it right to 2,2
* Click blue block to move it left to 2,2
* Click red block to move it up to 2,2
* Click blue block to move it left to 1,1
* Click red block to move it up to 2,1
* Click red block to move it up to 2,0
* Click indigo block to move it right to 2,2
* Click indigo block to move it right to 3,2
* Click blue block to move it right to 2,1
* Click red block to move it down to 2,1
* Click blue block to move it right to 3,2
* Click blue block to move it left to 2,2
* Click blue block to move it left to 1,2
* Click blue block to move it left to 0,2
* Click red block to move it down to 2,2
Found solution for level 32 in 31 steps:
* Click indigo block to move it down to 4,2
* Click indigo block to move it down to 4,3
* Click indigo block to move it left to 3,3
* Click indigo block to move it left to 2,3
* Click blue block to move it down to 1,1
* Click red block to move it right to 1,2
* Click blue block to move it down to 1,2
* Click indigo block to move it left to 1,3
* Click blue block to move it down to 1,3
* Click red block to move it right to 1,3
* Click red block to move it right to 2,3
* Click red block to move it right to 3,3
* Click blue block to move it left to 3,3
* Click indigo block to move it up to 1,3
* Click indigo block to move it up to 1,2
* Click blue block to move it left to 2,3
* Click indigo block to move it up to 1,1
* Click indigo block to move it up to 1,0
* Click indigo block to move it down to 1,1
* Click indigo block to move it down to 1,2
* Click indigo block to move it down to 1,3
* Click indigo block to move it down to 1,4
* Click red block to move it up to 1,4
* Click blue block to move it left to 1,3
* Click red block to move it up to 1,3
* Click blue block to move it left to 0,2
* Click red block to move it up to 1,2
* Click indigo block to move it up to 0,2
* Click indigo block to move it right to 1,2
* Click red block to move it up to 2,1
* Click red block to move it up to 2,0
Found solution for level 33 in 23 steps:
* Click indigo block to move it right to 2,3
* Click blue block to move it down to 1,2
* Click blue block to move it down to 1,3
* Click blue block to move it right to 2,3
* Click red block to move it up to 4,2
* Click blue block to move it right to 3,3
* Click indigo block to move it up to 4,2
* Click red block to move it left to 3,1
* Click red block to move it left to 2,1
* Click red block to move it left to 1,1
* Click red block to move it down to 1,2
* Click red block to move it down to 1,3
* Click red block to move it right to 2,3
* Click red block to move it right to 3,3
* Click blue block to move it up to 4,2
* Click blue block to move it up to 4,1
* Click blue block to move it left to 3,1
* Click red block to move it up to 3,2
* Click red block to move it up to 3,1
* Click blue block to move it left to 2,0
* Click red block to move it up to 3,0
* Click indigo block to move it left to 3,0
* Click indigo block to move it left to 2,0
Found solution for level 34 in 33 steps:
* Click blue block to move it left to 2,0
* Click blue block to move it left to 1,0
* Click indigo block to move it down to 0,1
* Click blue block to move it left to 0,0
* Click red block to move it right to 1,2
* Click blue block to move it down to 0,1
* Click indigo block to move it right to 1,2
* Click indigo block to move it right to 2,2
* Click indigo block to move it up to 2,1
* Click indigo block to move it up to 2,0
* Click red block to move it up to 3,1
* Click red block to move it up to 3,0
* Click red block to move it left to 2,0
* Click red block to move it left to 1,0
* Click indigo block to move it down to 0,1
* Click red block to move it left to 0,0
* Click blue block to move it right to 1,2
* Click red block to move it down to 0,1
* Click red block to move it right to 1,1
* Click red block to move it right to 2,1
* Click indigo block to move it right to 1,2
* Click indigo block to move it right to 2,2
* Click indigo block to move it up to 2,1
* Click red block to move it right to 3,0
* Click indigo block to move it up to 2,0
* Click red block to move it left to 2,0
* Click red block to move it left to 1,0
* Click indigo block to move it down to 0,1
* Click red block to move it left to 0,0
* Click red block to move it down to 0,1
* Click red block to move it right to 1,1
* Click red block to move it right to 2,1
* Click indigo block to move it right to 1,2
Found solution for level 35 in 39 steps:
* Click orange block to move it right to 1,4
* Click orange block to move it right to 2,4
* Click indigo block to move it up to 4,3
* Click orange block to move it right to 3,4
* Click red block to move it up to 4,3
* Click red block to move it up to 4,2
* Click red block to move it up to 4,1
* Click red block to move it left to 3,1
* Click orange block to move it up to 3,3
* Click orange block to move it up to 3,2
* Click orange block to move it up to 3,1
* Click red block to move it left to 2,0
* Click orange block to move it up to 3,0
* Click indigo block to move it left to 3,0
* Click indigo block to move it left to 2,0
* Click red block to move it down to 0,1
* Click indigo block to move it left to 1,0
* Click orange block to move it down to 0,1
* Click orange block to move it down to 0,2
* Click orange block to move it down to 0,3
* Click orange block to move it right to 1,3
* Click indigo block to move it down to 1,1
* Click indigo block to move it down to 1,2
* Click indigo block to move it down to 1,3
* Click orange block to move it right to 2,4
* Click indigo block to move it down to 1,4
* Click red block to move it right to 1,4
* Click red block to move it right to 2,4
* Click orange block to move it up to 4,3
* Click red block to move it right to 3,4
* Click indigo block to move it up to 4,3
* Click indigo block to move it up to 4,2
* Click indigo block to move it up to 4,1
* Click indigo block to move it left to 3,1
* Click red block to move it up to 3,3
* Click red block to move it up to 3,2
* Click red block to move it up to 3,1
* Click indigo block to move it left to 2,0
* Click red block to move it up to 3,0
import std.algorithm;
import std.array;
import std.conv;
import std.exception;
import std.file;
import std.range;
import std.stdio;
import std.string;
// https://github.com/CyberShadow/ae
import ae.utils.array;
import ae.utils.json;
struct JsonDetail
{
string type;
string direction;
}
struct JsonElement
{
string type;
int x, y;
JsonDetail o;
int color = -1;
}
enum MAX_COLORS = 4;
enum MAX_ARROWS = 8;
enum MAX_ARR_X = 6;
enum MAX_ARR_Y = 6;
struct Coord { byte x=-1, y=-1; }
struct Arrow { Coord xy; ubyte d; }
struct Level
{
Coord[MAX_COLORS] circles;
Arrow[MAX_COLORS] blocks;
ubyte[MAX_COLORS] colorMap;
bool[MAX_COLORS] haveCircle;
//Arrow[MAX_ARROWS] arrows;
byte[MAX_ARR_X][MAX_ARR_Y] arrowMap = (-1).repeat(MAX_ARR_X).array.repeat(MAX_ARR_Y).array;
byte[MAX_ARR_X][MAX_ARR_Y] circleMap = (-1).repeat(MAX_ARR_X).array.repeat(MAX_ARR_Y).array;
ubyte nColors;
ubyte nArrows;
byte minX, minY, maxX, maxY;
}
struct State
{
Arrow[MAX_COLORS] blocks;
Arrow[MAX_COLORS] oldBlocks;
int steps;
ubyte block;
int opCmp(ref const State s) const
{
auto c = memcmp(blocks.bytes, s.blocks.bytes);
if (c) return c;
return steps-s.steps;
}
bool opEquals(ref const State s) const
{
return blocks.bytes == s.blocks.bytes;
}
}
immutable string[] directionNames = ["right", "up", "left", "down"];
immutable string[] colorNames = ["red", "blue", "indigo", "orange", "teal", "green", "purple", "gray", "yellow", "red", "green", "brown", "orange"];
immutable Coord[4] directions = [Coord(1, 0), Coord(0, -1), Coord(-1, 0), Coord(0, 1)];
void main()
{
auto jsonLevels = jsonParse!(JsonElement[][])(readText("levels.json"));
//writeln("MAX_COLORS=", jsonLevels.map!(level => level.map!(element => element.color).array.sort.uniq.walkLength).reduce!max);
//writeln("MAX_ARROWS=", jsonLevels.map!(level => level.filter!(element => element.type == "fixture" && element.o.type == "arrow").walkLength).reduce!max);
Level convertLevel(JsonElement[] level)
{
Level result;
assert(result.arrowMap[5][5] == -1);
ubyte[int] colorDict;
ubyte registerColor(int color)
{
enforce(color >= 0, "Color expected");
auto p = color in colorDict;
if (p)
return *p;
auto i = colorDict.length.to!ubyte;
result.colorMap[i] = color.to!ubyte;
return colorDict[color] = i;
}
foreach (element; level)
{
switch (element.type)
{
case "fixture":
switch (element.o.type)
{
case "circle":
{
auto c = registerColor(element.color);
result.circles[c] = Coord(element.x.to!byte, element.y.to!byte);
result.haveCircle[c] = true;
//result.circleMap[element.y][element.x] = c;
break;
}
case "arrow":
{
assert(element.x >= 0 && element.x < MAX_ARR_X, element.x.text);
assert(element.y >= 0 && element.y < MAX_ARR_Y, element.y.text);
auto d = directionNames.countUntil(element.o.direction).to!byte;
enforce(d >= 0, "Bad direction: " ~ element.o.direction);
//result.arrows[result.nArrows++] = Arrow(Coord(element.x.to!byte, element.y.to!byte), d);
result.arrowMap[element.y][element.x] = d;
break;
}
default:
enforce(false, "Unknown detail type " ~ element.o.type);
}
break;
case "block":
enforce(element.o.type == "arrow", "Arrow detail for bloc expected");
result.blocks[registerColor(element.color)] = Arrow(Coord(element.x.to!byte, element.y.to!byte), directionNames.countUntil(element.o.direction).to!ubyte);
break;
default:
enforce(false, "Unknown element type " ~ element.type);
}
}
result.nColors = colorDict.length.to!ubyte;
result.minX = (level.map!(element => element.x).reduce!min-result.nColors).to!byte;
result.minY = (level.map!(element => element.y).reduce!min-result.nColors).to!byte;
result.maxX = (level.map!(element => element.x).reduce!max+result.nColors).to!byte;
result.maxY = (level.map!(element => element.y).reduce!max+result.nColors).to!byte;
// Align blocks that start on their arrows
foreach (ref b; result.blocks[0..result.nColors])
{
auto d = result.arrowMap[b.xy.y][b.xy.x];
if (d >= 0)
b.d = d;
}
return result;
}
auto levels = jsonLevels.map!convertLevel.array();
auto currentStates = appender!(State[]); currentStates.reserve(5_000_000);
auto prevStates = appender!(State[]); currentStates.reserve(40_000_000);
auto nextStates = appender!(State[]); currentStates.reserve(5_000_000);
foreach (i, ref level; levels)
{
stderr.writefln("Level %d", i);
void trace(ref State state)
{
string[] instructions;
while (state.steps >= 0)
{
instructions ~= "Click %s block to move it %s to %d,%d".format(
//state.block,
colorNames[level.colorMap[state.block]],
directionNames[state.oldBlocks[state.block].d],
state.blocks[state.block].xy.x,
state.blocks[state.block].xy.y,
);
state.blocks = state.oldBlocks;
auto i = prevStates.data.countUntil(state);
if (i >= 0)
state = prevStates.data[i];
else
{
instructions ~= "... I forgot the rest ...";
//assert(false);
break;
}
}
foreach_reverse (i, line; instructions)
writeln(" * ", line);
}
prevStates.clear();
currentStates.clear();
nextStates.clear();
nextStates.put(State(level.blocks, level.blocks, -1));
int step = 0;
searchLoop:
while (true)
{
prevStates.put(currentStates.data);
prevStates.data.sort!("a<b", SwapStrategy.stable)();
auto prevStatesArr = prevStates.data;
prevStates.clear();
prevStates.put(prevStatesArr.uniq);
enforce(nextStates.data.length, "Exhausted search for level %d".format(i));
currentStates.clear();
currentStates.put(nextStates.data.sort!("a<b", SwapStrategy.stable).uniq.setDifference!((a, b) => a.blocks.bytes < b.blocks.bytes)(prevStates.data));
nextStates.clear();
auto states = currentStates.data;
stderr.writefln("Step %d - %d new, %d visited", step, states.length, prevStates.data.length);
foreach (ref state; states)
{
//writeln(state.blocks[0..level.nColors]);
//bool solved = level.nColors.iota.map!(c => state.blocks[c].xy == level.circles[c]).all();
bool solved = level.nColors.iota.map!(c => !level.haveCircle[c] || state.blocks[c].xy == level.circles[c]).reduce!((a, b) => a&&b)();
// bool solved = true;
// foreach (ref b; state.blocks[0..level.nColors])
// if (level.b.)
// bool solved = level.nColors.iota.map!(c => state.blocks[c].xy == level.circles[c]).reduce!((a, b) => a&&b)();
if (solved)
{
writefln("Found solution for level %d in %d steps:", i, step);
trace(state);
break searchLoop;
}
foreach (ubyte c; 0..level.nColors)
{
auto nextState = state;
auto b = &nextState.blocks[c];
auto d = directions[b.d];
{
static Arrow[] blocks;
blocks = nextState.blocks[0..level.nColors];
static Coord sd;
sd = d;
static Level* slevel;
slevel = &level;
static bool push(Arrow* pb)
{
auto nxy = Coord(cast(byte)(pb.xy.x + sd.x), cast(byte)(pb.xy.y + sd.y));
if (nxy.x < slevel.minX || nxy.x > slevel.maxX
|| nxy.y < slevel.minY || nxy.y > slevel.maxY)
return false;
foreach (ref nb; blocks)
if (nb.xy == nxy)
{
if (!push(&nb))
return false;
break;
}
pb.xy = nxy;
if (nxy.x>=0 && nxy.x<MAX_ARR_X
&& nxy.y>=0 && nxy.y<MAX_ARR_Y)
{
auto d = slevel.arrowMap[nxy.y][nxy.x];
if (d >= 0)
pb.d = d;
}
return true;
}
if (!push(b))
continue;
}
//writeln(" -> ", nextState.blocks[0..level.nColors]);
nextState.block = c;
nextState.steps = step;
nextState.oldBlocks = state.blocks;
nextStates.put(nextState);
}
}
step++;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment