Once upon a time a friend of mine named Ray wrote, mostly in C but with a side of Perl, a CGI app which let you put in the classes you wanted using a simple query language and it would give you possible schedules based on the sections of that class being taught next semester. For example, you could put in "cs111, ee111, math121, (chem121 or phys121 or biol121)" and it would show you every possible schedule with no conflicting time constraints which had Intro to CS, Intro to Electrical Engineering, Calculus 1 and either Chemistry 1, Physics 1 or Biology 1.
Obviously this is a tremendously useful tool, but unfortunately, it suffered from bit rot; the data stopped being provided in the same format, I didn't know anyone who had access to the code, and being written in C I didn't think if I found it I'd be able to maintain it anyway.
Well, it turns out my friend Pi has a copy in his Git repository. Oops.
Anyway, this damn thing is at least halfway to useful already so I figured I might take it the rest of the way there and have another nice little utility under my belt. Plus it's an excuse to get better at Haskell.
If you run
cabal install in the repo, you'll wind up with a binary
schedql somewhere or other. Using it is a snap; just run it, and it will fetch all the data it needs, then show you a
> prompt. Type SchedQL queries into that prompt and it will print out matching schedules on standard output.
If you're curious about the library's design, I have some notes in the repository.