The US electoral system for the house of representatives groups `census districts' into `electoral districts' that supply a representative. Grouping the census districts differently into electoral districts can greatly affect the number of representatives the parties send to the house.

This project lets a student explore the phenomenon of redistricting, and especially `gerrymandering': applying the redistricting in a way that maximally benefits one party. In particular, students will at first aim to maximize the number of representatives in a state, from a party that numerically is in the minority. Students can then explore mitigating this phenomenon.

The project description explicitly targets an object-oriented object, where creating and copying objects is simple.

This project can be done by one or two undergraduate students, or AP high schoolers at the end of a first or semester programming course. The code is written completely from scratch, and requires no input data.

  • Summary. Develop a simple model of redistricting, and the potential unfairness of the process.

  • Topics. Recursion, arrays, classes. There is a possibility of exploring memoization and dynamic programming

  • Audience. Undergraduate or AP high school

  • Difficulty. High

  • Strengths. Explores a question of great societal impact.

  • Weaknesses. Requires careful analysis of the problem. No graphics output, so the interpretation of output requires some imagination

  • Dependencies. Strictly speaking no dependencies. Familiarity with the concepts of search and optimization may be helpful.

  • Variants. Expansion beyond the simple model is possible but requires considerable programming. Use of actual census data is very hard due to data formats used.