Exemplo n.º 1
0
        public void TestLeniency()
        {
            List <string> columns = new List <string>();

            columns.Add(SimplifiedColumns.Linear);
            Assert.AreEqual(0.0, LevelAnalyzer.Leniency(columns.ToArray()));

            columns.Add(SimplifiedColumns.LinearEnemy);
            Assert.AreEqual(0.5, LevelAnalyzer.Leniency(columns.ToArray()));

            columns.Add(SimplifiedColumns.PlatformOptional);
            Assert.AreEqual(0.5, LevelAnalyzer.Leniency(columns.ToArray()));

            columns.Add(SimplifiedColumns.PlatformOptionalEnemy);
            Assert.AreEqual(1.0, LevelAnalyzer.Leniency(columns.ToArray()));

            columns.Add(SimplifiedColumns.PlatformForced);
            Assert.AreEqual(1.5, LevelAnalyzer.Leniency(columns.ToArray()));

            columns.Add(SimplifiedColumns.PlatformForcedEnemy);
            Assert.AreEqual(2.5, LevelAnalyzer.Leniency(columns.ToArray()));

            columns.Add(SimplifiedColumns.LinearEnemy);
            Assert.AreEqual(3.0, LevelAnalyzer.Leniency(columns.ToArray()));

            columns.Add(SimplifiedColumns.Linear);
            Assert.AreEqual(3.0, LevelAnalyzer.Leniency(columns.ToArray()));
        }
Exemplo n.º 2
0
        public void TestLinearity()
        {
            List <string> columns = new List <string>
            {
                "----b",
                "----b",
                "----b",
                "----b"
            };
            List <int> result = LevelAnalyzer.Positions(columns.ToArray());

            Assert.AreEqual(4, result.Count);
            Assert.AreEqual(1, result[0]);
            Assert.AreEqual(1, result[1]);
            Assert.AreEqual(1, result[2]);
            Assert.AreEqual(1, result[3]);

            columns = new List <string>()
            {
                "----b",
                "-----",
                "---b-",
                "-----",
                "--b--",
                "-----",
                "-b---",
                "b----"
            };

            result = LevelAnalyzer.Positions(columns.ToArray());
            Assert.AreEqual(8, result.Count);
            Assert.AreEqual(1, result[0]);
            Assert.AreEqual(-1, result[1]);
            Assert.AreEqual(2, result[2]);
            Assert.AreEqual(-1, result[3]);
            Assert.AreEqual(3, result[4]);
            Assert.AreEqual(-1, result[5]);
            Assert.AreEqual(4, result[6]);
            Assert.AreEqual(-1, result[7]);

            columns = new List <string>()
            {
                "----b",
                "-b--b",
                "-----",
                "----b",
                "--b--",
            };

            result = LevelAnalyzer.Positions(columns.ToArray());
            Assert.AreEqual(5, result.Count);
            Assert.AreEqual(1, result[0]);
            Assert.AreEqual(4, result[1]);
            Assert.AreEqual(-1, result[2]);
            Assert.AreEqual(1, result[3]);
            Assert.AreEqual(3, result[4]);
        }
Exemplo n.º 3
0
        public void Execute()
        {
            string keyDirectory = Path.Combine(basePath, $"{extension}_{gram.GetN()}");

            if (Directory.Exists(keyDirectory) == false)
            {
                Directory.CreateDirectory(keyDirectory);
            }

            StreamWriter writer = File.CreateText($"{keyDirectory}.txt");

            writer.WriteLine("Sequence_Probability,Perplexity,Linearity_JSON_Positions,Leniency");

            ICompiledGram compiled       = gram.Compile();
            ICompiledGram simpleCompiled = simplifiedGram?.Compile();

            for (int i = 0; i < numSimulations; ++i)
            {
                UtilityRandom.SetSeed(new DateTime().Millisecond);

                Tuple <List <string>, List <string> > tuple;

                if (gram as NGram == null)
                {
                    tuple = GetColumnsBestGuess(compiled, simpleCompiled);
                }
                else
                {
                    tuple = GetColumnsSemiGuaranteed(compiled, simpleCompiled);
                }

                List <string> columns    = tuple.Item1;
                List <string> simplified = tuple.Item2;

                string[]   columnsArray  = columns.ToArray();
                List <int> positions     = LevelAnalyzer.Positions(columnsArray);
                JsonArray  jsonPositions = new JsonArray();
                foreach (int pos in positions)
                {
                    jsonPositions.Add(pos);
                }

                double sequenceProbability = compiled.SequenceProbability(columnsArray);
                writer.Write($"{sequenceProbability},");
                if (sequenceProbability == 0)
                {
                    writer.Write($"0,");
                }
                else
                {
                    writer.Write($"{1d/sequenceProbability},");
                }

                writer.Write($"{jsonPositions},");
                writer.Write($"{LevelAnalyzer.Leniency(simplified.ToArray())}\n");

                StreamWriter levelWriter = File.CreateText(Path.Combine(keyDirectory, $"{i}.txt"));
                levelWriter.Write(string.Join("\n", columnsArray));
                levelWriter.Flush();
                levelWriter.Close();

                if (i % 200 == 0)
                {
                    writer.Flush();
                }
            }

            writer.Flush();
            writer.Close();
        }