This website was built using my own open source code. I’ve made it in such a way that it allows users to download the website in full, excluding all of the project files (the file would be too big). The one of most impressive parts is that I’ve developed technologies that allows people to download the website without any external sources, (go on, try it!). This means that images and other media in this page have been embedded into a single HTML file. This includes, but is not limited to:
- Style Sheets
- External Resources
You will see that if you download this website by using the download link, you will be able to still browse it and use it as if it was the main website, even without an internet connection.
The way I encode data is by using Data URIs. While using URIs on a standard page is very silly as it doesn’t take advantage of the latest HTTP technologies, in this case, it fits perfectly simply because my website could no longer exist and you would still have a perfect snapshot of it years later. It also impresses my peers.
Another part that is very worth mentioning is that I generate my pages from the odt format. This format allows me to write this very document in LibreOffice, where I have spell check and other important tools to help me write. This is important because as the technologies will evolve and the tools will evolve, it’s important to use something solid to base your website on. In my case, I’ve decided that it would be the best to base it on an open standard that even Microsoft Office supports. Given this stability, I really don’t see this format dying any time soon. I can be certain that it will last a long time. And if it doesn’t, I could always find a better format.
I have made a Sudoku solver. It is available on GitHub and you can see the demo here.
The brute-force Backtracking algorithm is the major solving algorithm in this Sudoku solver with a supporting algorithm that helps remove singles from the graph.
Consider this following graph:
This Sudoku puzzle can be solved completely without the Backtracking algorithm. This is because there are squares where there is only one possible answer. For example, in the top-left grid, the top empty cell has to be 9 because no other possibilities exist. We know this because the possibilities are eliminated by examining the row, column and the square of the cell in any order.
By starting with numbers from 1 to 9 inclusive, we can remove the numbers present in the current square of the cell (1, 2, 3, 6, 8) and are left with numbers 4, 5, 7 and 9.
We can now look at the row of the cell and remove numbers 4 and 5 from our list of numbers. This leaves us wit the numbers 7 and 9.
By looking at the column of the cell, we can remove the 7 from our list of numbers, leaving us with only 9. Since 9 is the only number, we can be certain that only 9 should go into the cell so we write 9 into the cell. We can keep iterating this process until all the squares are filled in:
However, this doesn’t guarantee that there will be a solution. This is where you have to use backtracking. The following example cannot be solved using the previous method but can be solved using Backtracking: