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>();
        }