This is a public repository of scaffolding exercises for theoretical computer science, implemented on the on the PrairieLearn platform. These exercises were designed for CS 374 and other courses that teach theoretical computer science at the University of Illinois Urbana-Champaign.
A public practice course containing all our available exercises is available on PrairieLearn to anyone with a Microsoft account, Google account, or login credentials at a university with a PrarieLearn license.
For more information about the TheorieLearn project, including developers, publications, instructor usage, and funding information, please see the project page at https://theorielearn.github.io/.
For questions specific to this repository, feel free to join the TheorieLearn Slack or email the project director Jeff Erickson ([email protected]). For more general PrairieLearn questions, we recommend joining the PrairieLearn Slack; Jeff and other members of the TheorieLearn team are active on this Slack space.
Copyright © 2026 TheorieLearn
-
All text in this repository is released under a Creative Commons Attribution 4.0 International (CC-BY) License.
-
All code in this repository is released under The MIT License.
You may freely free to use, copy, adapt, remix, and/or redistribure any questions, assessments, elements, or other code from this repository, subject to the terms of these licenses. In particular, if you redistribute any code, please include a link either to this repository https://github.com/TheorieLearn/TheorieLearnPublic or to the main TheorieLearn page https://theorielearn.github.io/
These resources are based in part on Jeff Erickson's Algorithms textbook and other course materials, which are also freely available.
To use a question or series of questions, copy the question folders from our questions/ into your own questions/ folder.
Some questions have shared code and resources located in serverFilesCourse/theorielearn/. The easiest way would be to place this theorielearn/ subdirectory into your own serverFilesCourse, which will automatically support any question you import from here. You can optionally delete subfolders in theorielearn/ that aren't imported by the questions you use.
A select few questions have shared resources located in clientFilesCourse/. Please check if the questions you use utilize this directory and copy what you need.
To use an element, copy the elements you want from elements/ into your own elements/ folder. Each element is self contained and should work without external code.
TBA! We will provide a script in the future that will let you select questions and elements you want and package it for you to drop in your course, automatically.
We welcome participation with TheorieLearn in many ways. First we hope that you take and adapt the material here for use in your own courses. This can be done by copying material from the repo or by forking. If you fork it is a boon for the project if you make your fork public.
Our goal with the public TheorieLearn repository is not to produce canned courses so when considering pull requests we are not interested in more questions of the same style we already have. We are interested in new ways of teaching and testing theory material as well as bug fixes.
All contributions to the TheorieLearn repository must be made via pull requests. If you have something you would like to contribute to the core repository please feel free to make a pull request. All contributions will need to be licensed with the same licensing described above.
