Medium 0 solved 0% acceptance

Readability Grade

Estimate the school grade needed to read a text.

What you'll learn

  • Count letters, words and sentences
  • Apply the Coleman-Liau formula
  • Round and clamp a grade

Problem

The Coleman-Liau index estimates the U.S. grade level for a text: index = 0.0588 × L − 0.296 × S − 15.8, where L is the average number of letters per 100 words and S the average number of sentences per 100 words. Letters are A–Z/a–z, words are separated by spaces, and each ., ! or ? ends a sentence. Round the index to the nearest whole number.

Implement readability_grade(text).

Input

text: English text with at least one word.

Output

Return "Before Grade 1" when the index is below 1, "Grade 16+" when it is 16 or more, otherwise "Grade N".

Constraints

1 ≤ length ≤ 10,000

Examples

Example 1
Input:
text = "One fish. Two fish. Red fish. Blue fish."

Expected output:
expected = "Before Grade 1"
Input:
std::string text = "One fish. Two fish. Red fish. Blue fish.";

Expected output:
std::string expected = "Before Grade 1";
Input:
string text = "One fish. Two fish. Red fish. Blue fish.";

Expected output:
string expected = "Before Grade 1";

Explanation

29 letters, 8 words and 4 sentences give an index below 1: "Before Grade 1".

Example 2
Input:
text = "Harry Potter was a highly unusual boy in many ways. For one thing, he hated the summer holidays more than any other time of year. For another, he really wanted to do his homework, but was forced to do it in secret, in the dead of the night. And he also happened to be a wizard."

Expected output:
expected = "Grade 5"
Input:
std::string text = "Harry Potter was a highly unusual boy in many ways. For one thing, he hated the summer holidays more than any other time of year. For another, he really wanted to do his homework, but was forced to do it in secret, in the dead of the night. And he also happened to be a wizard.";

Expected output:
std::string expected = "Grade 5";
Input:
string text = "Harry Potter was a highly unusual boy in many ways. For one thing, he hated the summer holidays more than any other time of year. For another, he really wanted to do his homework, but was forced to do it in secret, in the dead of the night. And he also happened to be a wizard.";

Expected output:
string expected = "Grade 5";

Explanation

The average word and sentence lengths give an index that rounds to 5: "Grade 5".

How to approach it

Try on your own first, then open one hint at a time.

Hint 1

Count letters, words, and sentences separately from the same text.

Hint 2

Use the given index formula with letters per 100 words and sentences per 100 words.

Hint 3

Round to the nearest whole number before choosing the output label.

Expected complexity

O(n) time, O(1) extra space

References

This challenge is adapted for CodeUtility. Follow the statement and constraints above.

Learn from others

Community solutions

No published solutions yet. Solve this challenge to share the first one.