cpp icon indicating copy to clipboard operation
cpp copied to clipboard

Improve rating of difficulty

Open siebenschlaefer opened this issue 2 years ago • 1 comments

config.json assigns a "difficulty" to each exercise. Here they are:

1
    hello-world
    leap
    luhn
    space-age
    two-fer
2
    collatz-conjecture
    gigasecond
    grains
    pangram
    raindrops
    reverse-string
    secret-handshake
3
    acronym
    allergies
    armstrong-numbers
    atbash-cipher
    binary
    difference-of-squares
    etl
    grade-school
    hamming
    hexadecimal
    isogram
    matching-brackets
    nucleotide-count
    pascals-triangle
    protein-translation
    rna-transcription
    scrabble-score
    sum-of-multiples
    triangle
    trinary
4
    all-your-base
    binary-search
    robot-simulator
5
    anagram
    bob
    clock
    meetup
    nth-prime
    phone-number
    prime-factors
    queen-attack
    robot-name
    series
    sieve
    word-count
6
    circular-buffer
    complex-numbers
7
    beer-song
    crypto-square
    food-chain
    roman-numerals
10
    binary-search-tree
    say

IMHO some of those ratings are wildly off, e.g.:

  • luhn is definitely more difficult than hello-world, leap, or two-fer
  • I've mentored space-age several hundred times. Many students struggle with that exercise because they member functions have to be const-qualified and they have to choose a type that can represent the age in seconds for all tests.
  • pangram and isogram are very similar, IMHO they are equally difficult. (The only thing that makes isogram a little bit tricky is that the description doesn't restrict the characters to ASCII so one has to be careful not to call std::isalpha() or std::tolower() with a char.)
  • Are beer-song and food-chain really that complicated? (Frankly, I never understood the appeal of those exercises.)

I'm sure you can easily spot some more discrepancies.

And a more general question: Are the difficulties rated in comparison to each other or do those ratings have some meaning (e.g. 1=for beginners who just wrote their first hello-world, 4=for those who feel comfortable writing classes and functions, 7=complex tasks with multiple requirements)?

siebenschlaefer avatar Feb 28 '22 15:02 siebenschlaefer

The difficulties were set by me, a long time ago, to make sure we were up to date with a new config.json specification: https://github.com/exercism/cpp/commit/9ba292666f4fbee4f65491347b286a66385324d2

The reason for the ratings is purely because I made some guesses 5 years ago, and there have not really been discussions about it since AFAIK. I tried to keep the difficulties in relation to each other, but I don't think I had even written solutions to them myself.

Now that the website is showing different levels of difficulty, it may be a good idea to just bucket them into the same easy medium hard that the website does? I don't know if there's any benefit to giving other ratings. - https://github.com/exercism/docs/blob/main/building/tracks/config-json.md#practice-exercises

arcuru avatar Apr 21 '22 21:04 arcuru