Grading#

Computer Networks applies social gamification and computes your course grade differently than courses that follow a traditional design.

Your final grade is equal to \( \frac{P}{1000} \), where P is your total number of points.

We expect students to focus on the learning experience and not on maximizing the points obtained during the course. Points come naturally with gaining knowledge and understanding the course material. The grading philosophy of this course reflects this expectation: students receive points not only for regular (pre-defined) activities, but also for exceptional, additional work. In short, we reward exceptional academic behavior.

  1. Exception 1: Per VU policy, a grade of 5.5 is never awarded, so total scores in the interval [5500, 5750) are awarded with a passing grade of 6. Scores in the interval [5250, 5500) are awarded a failing grade of 5
  2. Exception 2: If a student did not complete the mandatory lab assignments or does not meet the exam passing criteria as described in Section 8.2, they cannot pass the course and will have their grade capped at 5.

The total number of points, P, you can earn in Computer Networks far exceeds 10,000. If you obtain a grade higher than 10, we (unfortunately) round it down to 10 to meet VU regulations. This has two important implications:

  1. You can experiment: participating in optional assignments cannot lower your final grade. It can only increase it.
  2. Obtaining a 10 requires excellence, not perfection. You can make mistakes or not participate in some parts of the course and still obtain a 10/10 score.

To pass the course, students must meet the following conditions:

  1. Obtain a minimum of 5,500 points across the different course components.
  2. Pass the mandatory lab assignments and have them approved by a teacher assistant during the lab sessions.
  3. Answer correctly at least a total of 13 questions for the mid-term and final exams combined.

Students are given two opportunities to attempt the mid-term exam, once during the initial mid-term exam session and once during the final. Therefore, during the final exams students may choose to retake the mid-term exam to improve their grade, while taking the final exam as well. Additional time is not provided for the retake of the mid-term exam. The highest grade is taken into account for both the midterm and the final. The answer to do I meet the exam passing criteria? can be given also via Figure 3.

def final_grade(
    points: int,  # Your total number of points
    passed_lab_a1: bool,  # Did you pass lab assignment A1?
    passed_lab_a2: bool,  # Did you pass lab assignment A2?
    correct_exam_a1: int,  # Number of questions correct on exam A1 (the midterm)
    correct_exam_a2: int,  # Number of questions correct on exam A2 (part A of the final exam)
    correct_exam_a3: int,  # Number of questions correct on exam A3 (part A of the resit)
    correct_exam_b1: int,  # Number of questions correct on exam B1 (part B of the final exam)
    correct_exam_b2: int,  # Number of questions correct on exam B2 (part B of the resit)
    did_final_exam: bool,  # Did you participate in the final exam?
    did_resit: bool,  # Did you participate in the resit?
) -> float | str:
    # If you do not participate in the final exam nor in the resit,
    # we register a "no show" (NS)
    if not did_final_exam and not did_resit:
        return "NS"

    passed_lab = passed_lab_a1 and passed_lab_a2

    correct_exam_a = max(correct_exam_a1, correct_exam_a2, correct_exam_a3)
    correct_exam_b = max(correct_exam_b1, correct_exam_b2)
    correct_exam = correct_exam_a + correct_exam_b

    # Your grade is calculated by dividing your points by 1000
    unrounded_grade = points / 1000

    # If you do not pass the mandatory lab assignments
    # or you do not pass the exam,
    # your score is capped at 5.0 (insufficient)
    if not passed_lab or correct_exam < 13:
        unrounded_grade = min(unrounded_grade, 5)

    # If your grade is between 5 and 6,
    # it gets rounded to the nearest integer
    if unrounded_grade > 5 and unrounded_grade < 6:
        unrounded_grade = round(unrounded_grade)

    # Your grade gets rounded to the nearest 0.5
    grade = round(unrounded_grade / 0.5) * 0.5

    return grade