Grading Guidelines for the Final Project (s99) ============================================= The solutions can exploit a whole range of programming techniques - find-route style: generative recursion with backtracking watch out for uses of uselsss set!'s and vector-set!'s - find-route with imperative backtracking: you understand the trial-and-error step as an imperative manipulation of the board and you properly undo these steps if the attempt fails -- no undo, bad credit - find-route with accumulator: the accumulator tells you how many moves you have made and then you can check whether it's the last one by comparing it with |PEGS|-2 -- they must use reverse at the end, otherwise -5% - missionary-and-cannibal style breadth-first search - find-route with set!'ed accumulator: very difficult -- needs undo action Ergo, I will only give you three hard rules to follow. The rules simply reinforce the most basic design elements we have trained this semester and that I emphasized again and again: 1. No signed design review, no credit. No exceptions. 2. The final project must contain: (quote and annotation) 1. a contract for each definition This means of course that every class of data used in a contract is specified: - 10% for systematic omission of contract - 10% for systematic omission of data definitions or systematically flawed data definition - 10% for systematic omission of purpose and effect statements. While this is not explicitly required, it is a standard part of the recipe. - deduct less for an occasional lapse 2. a block comment with tests This means at least one test per function - 10% for systematic omission - 10% for flawed tests, i.e., tests that don't cover at least all clauses of a datatype definition - deduct less for an occasional lapse 3. (optional) any other intermediate material you used to develop the individual procedures I expect a short explanation of what kind of approach they used: "... like missionary and cannibals" "... like find-route" "... a function that backtracks" Deduct up to - 5% for omission of such "global comment" 3. All functions should follow proper shape: - domain knowledge - structural recursion - generative recursion (at least one of them) Functions that don't follow the proper shape and contain errors are punished with 10% -- people must make conscientious choices when they program -- lesser mistakes, lesser problems. Do not subtract more than 100%. Do not waste time with obviously correct or obviously flawed solutions; give them a grade that matches the quality of their design.