private void EvaluateDifficulty() { if (RecursionDepth > Common.DifficultyUpperBoundMetrics[Common.Difficulty.Hard]) { _difficulty = Common.Difficulty.Samurai; } else { if (RecursionDepth > Common.DifficultyUpperBoundMetrics[Common.Difficulty.Medium] && RecursionDepth <= Common.DifficultyUpperBoundMetrics[Common.Difficulty.Hard]) { _difficulty = Common.Difficulty.Hard; } else { if (RecursionDepth > Common.DifficultyUpperBoundMetrics[Common.Difficulty.Easy] && RecursionDepth <= Common.DifficultyUpperBoundMetrics[Common.Difficulty.Medium]) { _difficulty = Common.Difficulty.Medium; } else { _difficulty = Common.Difficulty.Easy; } } } }
/// <summary> /// applies deletions rules on the basis of difficulty level /// </summary> /// <param name="difficulty"></param> /// <param name="index"></param> /// <param name="board"></param> public void MakeItDifficultBy(Common.Difficulty difficulty, int[] index, ref int[,] board) { if (difficulty == Common.Difficulty.Easy || difficulty == Common.Difficulty.Medium) { ExecuteRules(new[] { DeletionRules.RowRule, DeletionRules.ColumnRule, DeletionRules.DiagonalRule }, index, ref board); } else { ExecuteRules(new[] { DeletionRules.DiagonalRule }, index, ref board); } }
public static IGenerator GetGenerator(int squareDimension, Common.Difficulty difficulty) { if (squareDimension == 9) { return(new Generator9X9(difficulty)); } else { throw new Exception("This grid cannot be solved currently"); } }
/// <summary> /// generates random set of indexes, which will be used to delete items from sudoku /// </summary> /// <param name="difficulty"></param> /// <returns></returns> private IEnumerable <int[]> IndexesTobeDeleted(Common.Difficulty difficulty) { HashSet <int> set; var indexes = new List <int[]>(); switch (difficulty) { case Common.Difficulty.Easy: set = GenerateNumberSet(55 / 3); break; case Common.Difficulty.Medium: set = GenerateNumberSet(60 / 3); break; case Common.Difficulty.Hard: set = GenerateNumberSet(65 / 2); break; case Common.Difficulty.Samurai: set = GenerateNumberSet(75 / 2); break; default: throw new Exception("difficulty not specified..."); } foreach (var setItem in set) { var splits = setItem.ToString().ToCharArray(); if (splits.Length == 2) { var rIndex = int.Parse(splits[0].ToString()); var cIndex = int.Parse(splits[1].ToString()); indexes.Add(new[] { rIndex, cIndex }); } else { indexes.Add(new[] { 0, int.Parse(splits[0].ToString()) }); } } return(indexes); }
/// <summary> /// generates sudoku with specified difficulty level /// </summary> /// <param name="squareDimension"></param> /// <param name="difficulty"></param> /// <returns></returns> public Generator9X9(Common.Difficulty difficulty) { _difficulty = difficulty; }
private Common.Difficulty difficulty; //Difficulté de l'IA public IA(String n, List <Carte> m, int score, Common.Difficulty d) : base(n, m, score) { this.difficulty = d; }