public void GenerateAllInstances()
        {
            Console.WriteLine("extreme difficulty start");
            RealInstanceToProblemConverter conv = new RealInstanceToProblemConverter()
            {
                InstanceDescription = @"Extreme difficulty.",
            };

            GenerateInstancesForDifficulty("extreme", conv);

            Console.WriteLine("hard difficulty start");
            conv.InstanceDescription     = @"Hard difficulty.";
            conv.MinBeginingsMultiplier  = 0.7;
            conv.MinEndsMultiplier       = 0.7;
            conv.MinViewsMultiplier      = 0.7;
            conv.MinTimesAiredMultiplier = 0.7;
            conv.MinTimesAiredOffset     = -1;
            conv.MaxAdsPerBreakOffset    = 1;
            conv.DefaultAdsInBetweenSame = 5;
            GenerateInstancesForDifficulty("hard", conv);

            Console.WriteLine("medium difficulty start");
            conv.InstanceDescription     = @"Medium difficulty.";
            conv.MinBeginingsOffset      = -2;
            conv.MinBeginingsMultiplier  = 0.5;
            conv.MinEndsOffset           = -2;
            conv.MinEndsMultiplier       = 0.5;
            conv.MinViewsMultiplier      = 0.5;
            conv.MinTimesAiredMultiplier = 0.5;
            GenerateInstancesForDifficulty("medium", conv);

            Console.WriteLine("easy difficulty start");
            conv.InstanceDescription     = @"Easy difficulty.";
            conv.MinBeginingsMultiplier  = 0.4;
            conv.MinEndsMultiplier       = 0.4;
            conv.MinViewsMultiplier      = 0.4;
            conv.MinTimesAiredMultiplier = 0.4;
            GenerateInstancesForDifficulty("easy", conv);

            Console.WriteLine("very easy difficulty start");
            conv.InstanceDescription     = @"Very easy difficulty.";
            conv.MinBeginingsMultiplier  = 0.3;
            conv.MinEndsMultiplier       = 0.3;
            conv.MinViewsMultiplier      = 0.3;
            conv.MinTimesAiredMultiplier = 0.3;
            GenerateInstancesForDifficulty("very_easy", conv);

            Console.WriteLine("trivial difficulty start");
            conv.InstanceDescription      = @"Trivial difficulty.";
            conv.MinBeginingsMultiplier   = 0.2;
            conv.MinEndsMultiplier        = 0.2;
            conv.MinViewsMultiplier       = 0.2;
            conv.MinTimesAiredMultiplier  = 0.2;
            conv.MakeEverythingCompatible = true;
            GenerateInstancesForDifficulty("trivial", conv);
        }
        private void GenerateInstancesForDifficulty(string difficultyLevel, RealInstanceToProblemConverter converter)
        {
            DirectoryInfo initial_dir = new DirectoryInfo(RealDataDirectory);
            var           directories = initial_dir.GetDirectories();

            foreach (var dir in directories)
            {
                GenerateInstancesFromDirectory(dir, difficultyLevel, converter);
            }
        }
        private void GenerateInstance(string pathIn, string pathOut, RealInstanceToProblemConverter converter)
        {
            Generator instanceGenerator = new Generator
            {
                SourcePath        = pathIn,
                OutputFilename    = pathOut,
                InstanceConverter = converter,
            };

            instanceGenerator.GenerateInstance();
        }
        private void GenerateInstancesFromDirectory(DirectoryInfo directory, string difficultyLevel, RealInstanceToProblemConverter converter)
        {
            string descName = Path.Combine(directory.FullName, "desc.txt");

            if (File.Exists(descName))
            {
                StreamReader descFile = new StreamReader(descName);
                string       desc     = descFile.ReadToEnd();
                converter.InstanceDescription = desc;
            }
            foreach (var file in directory.GetFiles())
            {
                if (file.Name == "desc.txt")
                {
                    continue;
                }
                string newName         = Path.GetFileNameWithoutExtension(file.Name) + ".json";
                string newInstanceName = Path.Combine(InstanceDIrectory, difficultyLevel, directory.Name, newName);
                GenerateInstance(file.FullName, newInstanceName, converter);
                string newSolutionName = Path.Combine(ExampleSolutionDirectory, difficultyLevel, directory.Name, newName);
                GenerateSolution(file.FullName, newSolutionName);
                string newGradedSolutionName = Path.Combine(ExampleSolutionScoredDirectory, difficultyLevel, directory.Name, newName);
                GradeSolution(newInstanceName, newSolutionName, newGradedSolutionName);
            }
        }