I’d argue that if anything, it’s rather harder in C that in the other tracks because in C it also requires basic management of a singly-linked list (new, append, free), while in Python and Rust the language provides ready-made containers. (I’ll also note the C track has an exercise about doubly-linked lists which is Medium, though admittedly it’s about a larger set of operations.)
Is there a particular reason for the Easy classification on the C track? Or should this exercise be Medium here too?
I don’t think you should compare difficulty levels across tracks.
Those levels are set by different people at different times with no guarantee of consistency. The maintainers may have also chosen not to assign a difficulty level, leaving it on easy. Also, certain exercises might be easy for one student but harder for others.
Is Palindrome Products similar to other medium exercises you may have done on the track? That’d likely be useful feedback.
Thanks for your reply! I take your point about comparisons between tracks. Unfortunately, I’ve not done that many exercises in the C track yet, so I don’t have a lot of comparison points.
The only two medium exercises I’ve done from this track were Scrabble Score (which I found significantly easier) and Protein Translation.
Clearly there’s a large part of subjectivity in comparing exercises, as you said, but to focus on a somewhat objective element, of the three, Palindrome Products is the only one that requires use of malloc/free, and not the most trivial use (nested structures). Explicit memory management is usually a part of C that’s initially harder for people used to higher-level languages, hence my surprise with the “Easy” classification.
It’s really hard to rank difficulties into easy, medium and hard until you’ve done a significant percent of the exercises across the track Do feel free to keep notes! Once you’ve done a whole lot more, those notes could be adjusted and can be a useful data point!
Also note that difficulty can be measured across multiple criteria. Calling malloc in of itself isn’t very complicated. There’s how involved the code is (classes, method counts), how much optimization is needed, how complex the problem description is, the complexity or novelty of the algorithm or data structure, etc.