Playing Peg Solitaire in the Browser and having Rust solving it for you.
This is a bonus story for everyone who has read my account about algorithmically solving peg solitaire with Rust. In case you missed it, you may find it here.
I noticed, when writing about such a nice game and providing the implementation of a solver for it, it appears a little dry when not providing a way for everyone to enjoy the game. For this reason I have created a Vue-based web-application that lets you play the game in the browser. Both Desktop and Tablet/Mobile should work for you.
But this is not all!
In addition to that, you may find a button next to the game that triggers to finish the game for you automatically! This can be used at any state of the game, let it be at the beginning, or after some of your moves. The algorithm that runs behind the scene is exactly the one described in the aforementioned account. Also it will figure out if no solution can be achieved from a specific state.
Of course, even though Rust is such a well suited programming languages for combinatorial and numerical tasks, the browser is not able to run it. We rather must compile Rust to a common platform that the Browser is able to understand, and this is WebAssembly.
So, our algorithm is compiled to WebAssembly and this is loaded, initialized and then run by the browser. As we know, Rust is one of the fastest when it comes to CPU-heavy tasks. Luckily, since WebAssembly is very optimized code that runs near native speed, we do not loose too much by our methodology.
Some more details about how to compile Rust to WebAssembly and then integrating it into a Vue application to run the code inside a WebWorker, can be found here.
Ok, enough words have been said, let’s go to the game!
You’ll find it here. Have fun!
(should support Desktops, Mobiles and Tablets)
Please note, although this story is open to the public, the referred stories are not. In order to get them all you must be a member of medium. If you are interested and still no member, be invited to do this via the following link. Even though I am a big advocator of open source, open learning and open research, I have to close some of my stories (education + research material) to keep me going to produce these things.
Thank you for your understanding!