Please mark both questions out of 100 marks. Note the weights of the two parts: part 1 is worth 80%; part 2 is worth 20%. Part 1 Correctness is worth 75%: *80 marks if all autotests pass *remove marks for autotests failing, depending on how close the student's implementation is +remove 5-10 marks for small errors that cause autotests to fail (i.e. constructor takes a filename or file instead of a string) +remove 15 marks if all autotests would have passed if the student returned the anagrams in sorted order +remove 15 marks if student's list of anagrams contains duplicates +remove the majority of marks for other errors, such as missing some anagrams, or including invalid anagrams *10 marks for each of the two required optimizations (preprocessing dictionary to map words to LetterManagers in a Python map; and pruning the dictionary for relevant words) *From student's total grade on this part of the assignment, remove 5 marks if exception is not raised for negative max in constructor *From student's total grade on this part of the assignment, remove up to 10 marks if you detect other inefficiencies in the solution (i.e. exploring branches that have no chance to yield anagrams) Testing is worth 10%: +Test strategy is clear, comprehensive and well explained +Test cases are non-repetitive and test different aspects of the code +Easy to work your way through the test runs +Bottom line: testing is convincing; output shows that things are working as expected +Testing has to be done with Nose Design is worth 10%: +clean design +design decisions documented and explained in text file Comment/code style is worth 5%: +Blocks of code explained +Tricky or extra-ordinary spots in code explained +Comments do not just rephrase the obvious +Comments written in correct, clear English +Comments concise +Comments written for an informed reader (ie someone who can program) Part 2 Correctness is worth 100%: *100 marks if all autotests pass +this is almost an all-or-nothing question, but feel free to give minimal part marks for solutions that are conceptually close to what is required +remove minimal marks for small mistakes that cause autotests to fail (i.e. renaming the ll2nr function or failing for the empty list)