Ejemplo n.º 1
0
def match_score(a: Student, b: Student):
    name_score = ((name_hash(a.name) + name_hash(b.name)) % 117) / 117
    shared_classes = 0

    for semester in [1, 2]:
        schedule_a = a.semester_schedule(semester)
        schedule_b = b.semester_schedule(semester)
        if schedule_a is None or schedule_b is None:
            break
        for block in BLOCKS:
            if schedule_a[block] == schedule_b[block]:
                shared_classes += 1

    # max theoretical shared classes: BLOCKS*2
    # use a sqrt curve
    classes_score = -4 / (0.8 * shared_classes * shared_classes + 4) + 1

    # same grade?
    grade_score = (3 - abs(a.graduating_year() - b.graduating_year())) / 3

    print(f"match score query between {a.handle} and {b.handle}: name_score={name_score:.3f} classes_score={classes_score:.3f} grade_score={grade_score:.3f}")
    return name_score * 0.4 + classes_score * 0.4 + grade_score * 0.2
Ejemplo n.º 2
0
def test_grade_normal_2():
    student = Student('divanovich2023', 'Daniel')

    assert student.graduating_year() == 2023
Ejemplo n.º 3
0
def test_grade_duplicate():
    student = Student('echen20212', 'Echen')

    assert student.graduating_year() == 2021
Ejemplo n.º 4
0
def test_grade_normal():
    student = Student('hpeng2021', 'Michael')

    assert student.graduating_year() == 2021