Introduction: 2-D Puzzle Solver
Welcome to our engineering project! At first, we were motivated solely by the proof of concept and hopes for an impressive project, but after more work we learned the implications of such a project.
Save space for cargo ships
Vastly improve productivity when the code is faster
Use the solver as rehab or as therapy for people with disabilities or brain damage
For an overview of our process feel free to look at our poster: https://docs.google.com/a/umail.iu.edu/presentati...
And for more information, all of our documents may be found on our Google Drive- https://drive.google.com/drive/folders/0Byo7axKEui...
Step 1: Problem Statement and Motivation
Photo credit: https://www.shutterstock.com/image-photo/screaming...
People often times get agitated and frustrated by the complex puzzles and the extensive time consumed in the process of solving puzzles. Our mission for this project is to make an innovative engineering program that could solve tangram puzzles pieces on its own. Using python and laser cut pieces, we are able to create a software that solves 2D puzzles and shows a history of the steps it took.
Step 2: List of Materials
Photo Credit: http://tvtropes.org/pmwiki/pmwiki.php/Main/LongList
2D laser cut puzzle pieces (or wooden alternative for prototyping)
Colored Construction Paper*
Adhesive (eg. tape, glue...)*
*Only necessary for presentation of code
Step 3: Learning Concepts
We wrote our program in python, which was challenge for us because we had never programmed in python before. If you don't already understand the following concepts required for the solver, please look up online tutorials:
We recommend looking at Stack Overflow for additional help if needed.
If you would like to see our process, feel free to observe the progression of versions on our GitHub.
for most recent code go to files:
Team FB Tangram Solver v22
Image generator v3
Step 4: Preparing Prototype Pieces
To make our project the most appealing we could for people we were presenting to we used a laser cutter and cut out the pieces of our puzzle. In order to do this we needed to make specific kinds of files that our laser cutter could understand. Afterwards, we color coded the pieces with construction paper and modified the image code to match the pieces. This made the code more understandable.
Step 5: Writing the Code
Writing the code for this puzzle solver was by far the most time consuming because, we were learning as we went. While the coding for the puzzle solver itself took the most time we also had to create an image generator to give feedback to the user on what the answer was and a GUI that makes the code much easier for the user to interact with.
If you would like to try this project yourself, we highly recommend that this isn't your first project. Had we known more about coding to begin with, we could have gone much further with our project.
We recommend using a more advanced text editor than the standard notepad, along with taking baby steps to make sure the program still works at all points (you don't want to have to backtrack)
Step 6: Taking the Next Step
While many hours have been put into this project its far from done and these are a few things that we would like to do in the future with our project :
-3D printing 3D puzzles: We wanted to take our puzzle solving program to the next step by making it not only solve puzzles in 2-D but, take it to the third dimension as well.
-Writing Sudoku code: we wanted our program not only to work on tangram puzzles but maybe branch over into other puzzles in the future.
-Plotter: Instead of making the user interact with the computer we also wanted to make a x-y plotter that interacted with people. so instead of clicking pieces and dimensions in on the computer the plotter would just look at what people have given them and work from there.
-Nesting delays to “compete” with code: We also thought we may want to add in some delays in the code to make it more fun and interactive for users.
-Displaying Progress bars: progress bars are just nice feedback to let your users know that the program is making progress and maybe give an idea as to how far it has come along in its process.
-Optimization of code: The code we used in the program may not be the most efficient way to approach these situations and we wanted to try to find better methods and more efficient code to find the solutions to out problem faster.