public IOption<string> GenerateHint(QueryResultTable correct, QueryResultTable submitted) { if (correct.Equals(submitted)) { return Option.None<string>(); } var correctColumns = Columns(correct); var submittedColumns = Columns(submitted); if (correctColumns.Count == submittedColumns.Count && ContainsAllColumns(correctColumns, submittedColumns) && ContainsAllColumns(submittedColumns, correctColumns) ) { return Option.Some(WrongColumnOrder); } if (correctColumns.Count < submittedColumns.Count && ContainsAllColumns(submittedColumns, correctColumns) ) { return Option.Some(TooManyColumns); } return Option.None<string>(); }