Rubric — Projects A and B (30 marks each)

Shared criteria; apply to either project. Half-bands where genuinely between. The two "problem solving" criteria are where this course earns its name — do not let correct code alone reach the top bands.

1. Programs work as specified (8)

BandDescriptor
8All specified behaviour present and correct, including seeds and edge handling; validator (B) checks every rule independently.
6Core behaviour correct; one specified feature missing or subtly wrong (e.g. a cleaning rule silently applied).
4Runs and produces plausible output, but 2–3 specified behaviours are wrong or missing.
2Runs with effort; behaviour deviates from the brief in most parts.
0Does not run.

2. Problem-solving process shown (8)

BandDescriptor
8Choices are argued from the data/brief (priority rule, cleaning rules, seed policy); alternatives considered and rejected with reasons.
6Choices stated and mostly justified; one significant alternative missing.
4Choices stated but justified only by assertion ("this is simpler").
2Choices invisible; the code reads like the brief was guessed.
0No evidence of decision-making.

3. Analysis (8)

BandDescriptor
8Complexity arithmetic correct with growth terms named; the trade-off/constraint part is specific and honest (includes what the method cannot do).
6Complexity correct at Big-O level but the trade-off discussion is thin.
4Complexity attempted with minor slips; trade-off is generic.
2Complexity present but wrong; trade-off missing.
0No analysis.

4. Data integrity and reproducibility (6)

BandDescriptor
6Generator documented and seeded; every cleaning/fixing rule reported with counts; nothing silent anywhere.
4Seeds present; one rule undisclosed or discovered only by re-running.
2Data hard-coded or partly undocumented; fixes not reported.
0No reproducibility.

Marking shortcut: re-run the generator with the submitted seed — outputs must match byte-for-byte (A: sales.csv; B: requests.json).