Skip to main content

Command Palette

Search for a command to run...

Grading Students Algorithm

This algorithm is a part of HackerRank's algorithm implementation challenges.

Updated
โ€ข4 min read
Grading Students Algorithm
U

Writing about things I learn helps me understand better, and I hope reading them will help you too! ๐Ÿ™‚

In this article, I'll be describing how I solved the Grading Students Challenge on HackerRank using Python 3.

This challenge is part of the Implementation challenges in the Algorithm section on HackerRank.

Problem ๐ŸŽฒ

HackerLand University has the following grading policy:

  • Every student receives a grade in the inclusive range from 0 to 100.
  • Any grade less than 40 is a failing grade.

Sam is a professor at the university and likes to round each student's grade according to these rules:

  • If the difference between the grade and the next multiple of 5 is less than 3, round grade up to the next multiple of 5.
  • If the value of grade is less than 38, no rounding occurs as the result will still be a failing grade.

Example

  • grade = 84 round to 85 (85 - 84 is less than 3)
  • grade = 29 do not round (result is less than 40)
  • grade = 57 do not round (60 - 57 is 3 or higher)

Given the initial value of grade for each of Sam's n students, write code to automate the rounding process.

Function Description

Complete the function gradingStudents.

gradingStudents has the following parameter(s):

  • int grades[n]: the grades before rounding

Returns

  • int[n]: the grades after rounding as appropriate

Input Format

The first line contains a single integer, n, the number of students. Each line i of the n subsequent lines contains a single integer, grades[i].

Constraints

  • 1 โ‰ค n โ‰ค 60
  • 0 โ‰ค grades[i] โ‰ค 100

Samle Input:

73
67
38
33

Samle Ouput:

75
67
40
33

Explanation:

1484768684-54439977a1-curving2.png

  1. Student 1 received a 73, and the next multiple of 5 from 73 is 76. Since 75-73 < 3, the student's grade is rounded to 75.
  2. Student 2 received a 67, and the next multiple of 5 from 67 is 70. Since 70 - 67 = 3, the grade will not be modified and the student's final grade is 67.
  3. Student 3 received a 38, and the next multiple of 5 from 38 is 40. Since 40 - 38 < 3, the student's grade will be rounded to 40.
  4. Student 4 received a grade below 33, so the grade will not be modified and the student's final grade is 33.

Solution ๐Ÿ”Ž

We'll code up logic for all conditions in the problem.

Let's assume grades = [73, 67, 38, 33] to test our solution.

def gradingStudents(grades):
    # Write your code here

Step 1๏ธโƒฃ : Loop through the array of grades

We'll need to apply or grading logic to every grade in the array by looping and storing the results in a new empty array called `result.

def gradingStudents(grades):
    result = []
    for grade in grades:

Step 2๏ธโƒฃ: Developing the grading logic using conditional statements. โš™๏ธ

For us to track how each grade relates to a multiple of 5, we use:

    tmp = grade % 5
  • If the grade is less than 38, no rounding occurs, and add the grade to the results array:
    if grade < 38:
        result.append(grade)
  • If the difference between the grade and the next multiple of 5 is less than 3, round grade up to the next multiple of 5.
  • If the difference between the grade and the next multiple of 5 is greater than or equal to 3, the grade will not be modified and the student's final grade will be returned.
  • Add the modified grades to the results array.
    elif (5 - tmp) < 3:
        result.append(grade + 5 - tmp)
    elif (5 - tmp) == 3:
        result.append(grade)
  • else return all other grades outside this condition and add them to the results array.
        else:
            result.append(grade)
  • Finally, return our completed results array.
    return result

Full code:

def gradingStudents(grades):
    result = []
    # Write your code here
    for grade in grades:
        tmp = grade % 5
        if grade < 38:
            result.append(grade)
        elif (5 - tmp) < 3:
            result.append(grade + 5 - tmp)
        elif (5 - tmp) == 3:
            result.append(grade) 
        else:
            result.append(grade)
    return result  


gradingStudents([73, 67, 38, 33])
>> [75, 67, 38, 33]

Hope this helps with understanding this challenge. Happy Coding!๐Ÿ‘จ๐Ÿฝโ€๐Ÿ’ป

Buy me a coffee.png