Sudoku Solver

From UBC Wiki

Authors: Lironne, Mahbod, Eylül

What is the problem?

Explore the effectiveness of using Prolog to write an implementation of the logic-based puzzle Sudoku. Our project will allow the user to view with the puzzle and choose to use the machine to solve it for them.

What is the something extra?

We will attempt to introduce non-standard and unique Sudoku formats with more than just the simple 3x3x3 layout, to compare the difference in added complexity for implementation in Prolog. Our goal is to build a UI to visualize a game as well.

What did we learn from doing this?

We managed to write a complex Sudoku solver that solves several types of Suduko, Each type of a Suduko board has different additional constraints on top of the regular one.

Functional programming proved to be very suitable for the task of solving the Suduko board, since the game is based off logical constraints introducing new ones on top of previous constraints was an easy task, as we only had to create a new predicate and enforce it.

One limitation of prolog we encountered happened when adding additional UI components for user interactions. There seems to be virtually no support in Prolog for any sort of rendering libraries. We did find the existence of Swish, which is a library for visualizing some graphs and other simple computations in Prolog, but upon further digging, this library utilized JavaScript for its rendering components. We ended up having to use JS to create those components for our project.

Links to code

Link to code can be found here