Introduction

Welcome to the 313E Collaborative Study Guide! As the semester progresses, the TAs will be compiling important notes/information for the exams here. The information here is current for spring 2023.

Contributions from students are also welcome! If you would like to add your notes, open up a pull request in our repository: 313e-utaustin/study-guide. Follow the instructions in the README to add a new section or modify an existing one.

If you find a typo or wrong code, please let us know by opening an issue here.

Exam Information

This is the tentative exam schedule:

TestDateTime
Test 1Fri, 10 Feb6:00 PM - 10:00 PM
Makeup 1Sun, 12 Feb10:00 AM - 2:00 PM
Test 2Fri, 24 Mar6:00 PM - 10:00 PM
Makeup 2Sun, 26 Mar10:00 AM - 2:00 PM
Test 3Mon, 24 Apr6:00 PM - 10:00 PM
Makeup 3Tue, 25 Apr10:00 AM - 2:00 PM

The test will conducted through Canvas and Gradescope. There will be 4 or 5 programming questions at or below the difficulty of the previous assignments.

Each question will have an autograder to check for correctness. Unlike the assignments, we will not grade based on style or comments. However, we will still manually review your submissions. If we discover that test cases have been hardcoded into your submission, we will deduct the appropriate amount of points.

There will be an extra credit question that is not related to programming. This will be either a short answer or multiple choice question. Please work on this only if you have passed all the Gradescope test cases.

Exam Tips

Before the exam:

  • Review past assignments and understand the underlying algorithms (for example, merging two intervals in Interval.py).
  • Review important algorithms and data structures covered in class.
  • Be comfortable with Python syntax (this will especially help with debugging).
  • Practice! The only way to get better at thinking logically is to solve more problems.

During the exam:

  • The questions don't need to be solved in a sequential order. Move onto another problem if you're struggling with the current one.
  • Work out some test cases by hand and see if you can identify a pattern.
  • Start with the simplest case and build on top of that (this will especially be helpful for recursion in later exams).
  • Approach the problem from different angles (for example, sorting the list for merging intervals).
  • Write out pseudocode to outline your thought process and identify potential edge cases.
  • Memory constraints are lenient, so feel free to use as many auxiliary data structures as you need -- as long as it's not egregious.