Task calendar scheduling algorithm
This issue is simply creating a weighted function modeling the importance of each assignment. The priority function should take into account the difficulty, due date, and other factors you choose with a weighted sum of these factors.

As for the difficulty, my suggestion would be to have a difficulty scale 1-10 that the user chooses, and create your weighted function based on that, so more difficult assignments will have a higher priority.