In Part I of this series we started creating the framework for our solver by creating the Cipher and Aristocrat classes. You are probably thinking “This is a series about interactive solvers but this is all code!” Well, the classes inheriting from Cipher will be the ones doing all the work in our solver. In this part of the series we will finally create the CipherSolver class that will work with the Cipher classes to interactively get the work done. So lets just jump right into the code so we can finally get to our first working solver, the AristocratSolver class![Read More]
In this post we’ll first analyze what we are trying to accomplish and then begin to create an extensible framework that will allow us to adapt our solver to many different kinds of ciphers.
Building the framework
Our main goal is to create an extensible interactive solver, so lets break down the similarities that all ciphers have. You’ve got to think really generic here. All ciphers have the following similarities:
- They manipulate some kind of text.
- They have an encryption algorithm.
- They have a decryption algorithm.
With these three building blocks we can start creating our base framework. Lets create a brand new folder that will contain all our source code and files that we will use. I’m going name my folder “CryptogramSolver”. Whenever we create new files or want to execute anything, it will be done from this location.[Read More]
I’ve been a member of the ACA (American Cryptogram Association) for about a year now. I started out solving Aristocrats and Patristocrats with pen and paper. It was definitely a slow start as trial and error created a lot of eraser dust on my desk. Being a programmer by trade, my brain instantly sees how I could speed up the process using computers and programming. Now, I didn’t want to ruin the sense of accomplishment that I got when I solved my first Aristocrat by hand by making the computer just do all the work for me. It has taken much constraint for me not to write an automatic solver. The happy medium I found was with computer assisted solving. Let the computer do all the tedious manual labor and let my mind work on the actual solving process and techniques.
I started writing my own interactive solver about a month after I joined the ACA and I wanted to share my experience with others. Hopefully, someone will find this information useful or it might inspire them to delve into cryptography or programming.
My prerequisites for an interactive solver are as follows:
- Has to be easily modified as needed when inspiration strikes.
- Has to be extendable so that it can be utilized for any kind of cipher.
- The programming language used has to be freely available and easy to install on most major operating systems.
- The programming language used has to be relatively easy to understand for new users.
Out of all of the languages that I have used over the years, Python scored really high with the above prerequisites. Python comes pre-installed on most major operating systems (except windows) or is very easy to obtain and install. Now this doesn’t mean that you can’t use a different programming language to create an interactive solver. Any programming language will work just fine. Whatever you are comfortable with is the best choice for you.
There are many resources for learning python so I won’t be going into great detail over all the language features or syntax nor will this be a beginner’s tutorial for python. If you are in need of python learning materials check out the following:
- How to think like a computer scientist: Learning with Python
- Dive Into Python
- Mike Cowan’s Learning to program in python for novice programmers and cipher enthusiasts
This is only the introduction but we’ll jump right into the programming in Part I. Each Part will extend our solver with more functionality and hopefully we’ll end up with a easy to use interactive solver!
Note: For now all the code will be for Python 2.6. Most operating systems are still bundling this version so it is the most accessible for now.
subscribe via RSS