Exemple #1
0
        private static void Test3()
        {
            var generatorConfig = new InputGeneratorConfig
            {
                Seed        = 1337,
                InputLength = 10 * 1024 * 1024,
                //SentenceLength = new MinMaxPair(int.MaxValue, int.MaxValue),
                SentenceLength = new MinMaxPair(5, 10),
                PhraseCount    = new MinMaxPair(2048),
                WordLength     = new MinMaxPair(6, 10),
                PhraseLength   = new MinMaxPair(3, 6)
            };

            var generator = new InputGenerator(generatorConfig);
            var pair      = generator.Generate();

            //Console.WriteLine(pair.Input);
            Console.WriteLine(pair.Input.Length);
            Console.WriteLine();
            //Console.WriteLine(pair.Solution);
            Console.WriteLine(pair.Solution.Length);
            Console.WriteLine();

            var solver = new SampleSubmission();
            var result = solver.Solve(pair.Input);

            //Console.WriteLine(result);
            Console.WriteLine(result == pair.Solution);
        }
Exemple #2
0
        private static void Test5()
        {
            var myRandom        = new Random(0);
            var difficultyLevel = 0;
            var length          = (int)Math.Pow(2, difficultyLevel) * 128;
            var length2         = (int)Math.Pow(2, 5) * 128;
            var length3         = (int)Math.Pow(2, 10) * 128;
            var length4         = (int)Math.Pow(2, 15) * 128;

            var configs = new[]
            {
                new InputGeneratorConfig                // 0
                {
                    //Seed = myRandom.Next(),
                    InputLength = length,

                    WordLength     = new MinMaxPair(6, 10),
                    SentenceLength = new MinMaxPair(5, Math.Max(10, length / 50)),

                    PhraseLength         = new MinMaxPair(2, Math.Max(10, length / 500)),
                    PhraseCount          = new MinMaxPair(Math.Max(1, length / 2000), Math.Max(1, length / 100)),
                    PhraseCollapseChance = .2,
                    PhraseRepeatCount    = new MinMaxPair(2, Math.Max(2, length / 1000)),

                    DecoyPhraseCount = new MinMaxPair(Math.Max(1, length / 2000), Math.Max(1, length / 200)),
                    DecoyRepeatCount = new MinMaxPair(2, Math.Max(2, length / 10000))
                },

                new InputGeneratorConfig                // 5
                {
                    //Seed = myRandom.Next(),
                    InputLength = length2,

                    WordLength     = new MinMaxPair(6, 10),
                    SentenceLength = new MinMaxPair(5, Math.Max(10, length2 / 50)),

                    PhraseLength         = new MinMaxPair(2, Math.Max(10, length2 / 500)),
                    PhraseCount          = new MinMaxPair(Math.Max(1, length2 / 400), Math.Max(1, length2 / 200)),
                    PhraseCollapseChance = .2,
                    PhraseRepeatCount    = new MinMaxPair(2, Math.Max(2, length2 / 1000)),

                    DecoyPhraseCount = new MinMaxPair(Math.Max(1, length2 / 1000), Math.Max(1, length2 / 500)),
                    DecoyRepeatCount = new MinMaxPair(2, Math.Max(2, length2 / 10000))


                                       //InputLength = length2,

                                       //WordLength = new MinMaxPair(6, 10),
                                       //SentenceLength = new MinMaxPair(Math.Max(10, length2 / 100), Math.Max(10, length2 / 50)),

                                       //PhraseLength = new MinMaxPair(2, Math.Max(5, (int)Math.Sqrt(length2 / 200))),
                                       //PhraseCount = new MinMaxPair(Math.Max(1, length2 / 900), Math.Max(1, length2/600)),
                                       //PhraseCollapseChance = .1,
                                       //PhraseRepeatCount = new MinMaxPair(2, Math.Max(2,(int)Math.Sqrt( length2 / 5000))),

                                       //DecoyPhraseCount =new MinMaxPair(Math.Max(1, length2 / 1600), Math.Max(1, length2/1300)),// new MinMaxPair(0),// new MinMaxPair(Math.Max(1, length2 / 1000), Math.Max(1, length2 / 500)),
                                       //DecoyRepeatCount = new MinMaxPair(2, Math.Max(2,(int)Math.Sqrt( length2 / 8000))),
                },

                new InputGeneratorConfig                // 10
                {
                    //Seed = myRandom.Next(),
                    InputLength = length3,

                    WordLength     = new MinMaxPair(6, 10),
                    SentenceLength = new MinMaxPair(Math.Max(10, length3 / 100), Math.Max(10, length3 / 50)),

                    PhraseLength         = new MinMaxPair(2, Math.Max(5, (int)Math.Sqrt(length3 / 200))),
                    PhraseCount          = new MinMaxPair(Math.Max(1, length3 / 900), Math.Max(1, length3 / 600)),
                    PhraseCollapseChance = .2,
                    PhraseRepeatCount    = new MinMaxPair(2, Math.Max(2, (int)Math.Sqrt(length3 / 5000))),

                    DecoyPhraseCount = new MinMaxPair(Math.Max(1, length3 / 1600), Math.Max(1, length3 / 1300)), // new MinMaxPair(0),// new MinMaxPair(Math.Max(1, length3 / 1000), Math.Max(1, length3 / 500)),
                    DecoyRepeatCount = new MinMaxPair(2, Math.Max(2, (int)Math.Sqrt(length3 / 8000))),           //new MinMaxPair(0), //new MinMaxPair(2, Math.Max(2, length3 / 10000))
                },

                new InputGeneratorConfig                // 15
                {
                    //Seed = myRandom.Next(),
                    InputLength = length4,

                    WordLength     = new MinMaxPair(6, 10),
                    SentenceLength = new MinMaxPair(Math.Max(10, length4 / 100), Math.Max(10, length4 / 50)),

                    PhraseLength         = new MinMaxPair(2, Math.Max(5, (int)Math.Sqrt(length4 / 200))),
                    PhraseCount          = new MinMaxPair(Math.Max(1, length4 / 7500), Math.Max(1, length4 / 6000)),
                    PhraseCollapseChance = .2,
                    PhraseRepeatCount    = new MinMaxPair(2, Math.Max(2, (int)Math.Sqrt(length4 / 8000))),

                    DecoyPhraseCount = new MinMaxPair(Math.Max(1, length4 / 8000), Math.Max(1, length4 / 7500)), // new MinMaxPair(0),// new MinMaxPair(Math.Max(1, length4 / 1000), Math.Max(1, length4 / 500)),
                    DecoyRepeatCount = new MinMaxPair(2, Math.Max(2, (int)Math.Sqrt(length4 / 10000))),          //new MinMaxPair(0), //new MinMaxPair(2, Math.Max(2, length4 / 10000))
                }
            };

            // TODO too few acronym for low difficulty
            // TODO size increase not granual enough
            foreach (var(config, index) in configs.WithIndex())
            {
                Console.WriteLine($"TargetLength: {config.InputLength}");
                for (int i = 0; i < 10; i++)
                {
                    config.Seed = myRandom.Next();
                    var generator    = new InputGenerator(config);
                    var generated    = generator.Generate();
                    var solver       = new SampleSubmission();
                    var solverResult = solver.Solve(generated.Input);

                    if (solverResult != generated.Solution)
                    {
                        throw new Exception();
                    }

                    Console.WriteLine($"{index}, {generated.Input.Length}");
                }
            }
        }