public bool ValidateRegex(PuzzleAnswerDTO puzzleAnswers) { // Get the puzzles from the repository var puzzleDictionary = regexPuzzleRepository.GetRegexPuzzle().ToDictionary(k => k.Id, v => v); foreach (var p in puzzleAnswers.Answer) { if (!puzzleDictionary.ContainsKey(p.Id)) throw new Exception("Unable to find the puzzle with the id " + p.Id); var puzzle = puzzleDictionary[p.Id]; MatchCollection mc = Regex.Matches(puzzle.Problem,p.Regex, RegexOptions.Multiline); var result = ""; foreach (Match m in mc) { result += m.Value; result += Environment.NewLine; } // Replace \n with \r\n since the puzzle file is using \n for newline where as matched // regex uses \r\n var goalwithNewline = puzzle.Goal.Replace("\n", Environment.NewLine); if (result != goalwithNewline) return false; } // Submit result regexPuzzleRepository.SubmitPuzzleResult(new PuzzleResult { Name = puzzleAnswers.Name, DateSubmitted = DateTime.Now, Email = puzzleAnswers.Email, RegexAnswers = string.Join(Environment.NewLine, puzzleAnswers.Answer.Select(a => a.Regex).ToList()) }); return true; }