Feature-rich sudoku application coded entirely in a Lisp-based, pure-functional language (Racket ISL).

View the Project on GitHub Jonqora/racket-sudoku

Smooth Sudoku


I developed this program as a culmination of all design patterns learned after completing a course in Systematic Program Design at UBC. That curriculum (CPSC 110) is based on How to Design Programs.

  1. The earliest roots of the sudoku solving algorithm used in this code were from a backtracking search problem taught in class instructional materials. The original problem used a rudimentary brute-force search tree.

  2. During class term, I accepted an extra challenge to redesign the same solver algorithm using constraint sets. Redesigning the data types and functions this way allowed the new algorithm to become much more efficient.

  3. For this current project after term ended, I designed and built a full sudoku game with GUI that employs multiple variations on the constraint set algorithm. My game includes several features that make use of those constraint sets (e.g. autosolve mode, hint system, error tracking, and show choices).

My approach to this project used top-down systematic design and thorough test-driven development at every step. The code is entirely written in Racket’s Intermediate Student, a pure functional language. It also uses the HtDW framework for interactive programs.


Smooth Sudoku’s features and GUI are designed for a smooth and streamlined user experience. All input is through the mouse.

Smooth Sudoku: new game and hover-to-play

Smooth Sudoku: show errors and undo

Smooth Sudoku: hints and show choices

Smooth Sudoku: autosolve and win screen

User Information


To run from source code:

HOW TO INSTALL: Install the latest version of DrRacket. Download and open the play-sudoku.rkt source file in DrRacket, then run the program using the DrRacket IDE.

To run .exe release file:

HOW TO INSTALL: Download the latest .exe release from this repo folder, then run the application.