예제 #1
0
 public static ExtraData.Coordinates[, ][] GetCoordsMatrix(Function function)
 {
     if (function.VarsCount == 1)
     {
         return new ExtraData.Coordinates[2, 1][]
                {
                    { new[] { ExtraData.Coordinates.NOT } },
                    { new[] { ExtraData.Coordinates.IS } }
                }
     }
     ;
     int[][]  varsArrs     = SplitVars(function);
     string[] vertGrayCode = GetGrayCode(varsArrs[0].Length, false);
     string[] horGrayCode  = GetGrayCode(varsArrs[1].Length, false);
     ExtraData.Coordinates[, ][] result = new ExtraData.Coordinates[vertGrayCode.Length, horGrayCode.Length][];
     for (int i = 0; i < vertGrayCode.Length; i++)
     {
         for (int j = 0; j < horGrayCode.Length; j++)
         {
             result[i, j] = new ExtraData.Coordinates[function.VarsCount];
             for (int k = 0; k < vertGrayCode[i].Length; k++)
             {
                 result[i, j][k] = vertGrayCode[i][k] == '0' ? ExtraData.Coordinates.NOT : ExtraData.Coordinates.IS;
             }
             for (int k = vertGrayCode[i].Length; k < function.VarsCount; k++)
             {
                 result[i, j][k] = horGrayCode[j][k - vertGrayCode[i].Length] == '0' ? ExtraData.Coordinates.NOT : ExtraData.Coordinates.IS;
             }
         }
     }
     return(result);
 }
예제 #2
0
 private static ExtraData.Coordinates[] GetCommonCoordinates(Dot[,] dots)
 {
     foreach (Dot dot in dots)
     {
         if (dot == null)
         {
             return new ExtraData.Coordinates[] { ExtraData.Coordinates.FALSE, ExtraData.Coordinates.FALSE, ExtraData.Coordinates.FALSE, ExtraData.Coordinates.FALSE }
         }
     }
     ;
     ExtraData.Coordinates[] result = new ExtraData.Coordinates[4];
     for (int i = 0; i < 4; i++)
     {
         result[i] = dots[0, 0].Coordinates[i];
     }
     foreach (Dot dot in dots)
     {
         for (int i = 0; i < 4; i++)
         {
             if (result[i] != dot.Coordinates[i])
             {
                 result[i] = ExtraData.Coordinates.FALSE;
             }
         }
     }
     return(result);
 }
예제 #3
0
        private static ExtraData.Coordinates[] GetCommonCoordinates(List <Dot> dots)
        {
            int varsCount = dots[0].VarsCount;

            foreach (Dot dot in dots)
            {
                if (dot == null)
                {
                    return new ExtraData.Coordinates[] { ExtraData.Coordinates.FALSE, ExtraData.Coordinates.FALSE, ExtraData.Coordinates.FALSE, ExtraData.Coordinates.FALSE }
                }
            }
            ;
            ExtraData.Coordinates[] result = new ExtraData.Coordinates[varsCount];
            for (int i = 0; i < varsCount; i++)
            {
                result[i] = dots[0].Coordinates[i];
            }
            foreach (Dot dot in dots)
            {
                for (int i = 0; i < varsCount; i++)
                {
                    if (result[i] != dot.Coordinates[i])
                    {
                        result[i] = ExtraData.Coordinates.FALSE;
                    }
                }
            }
            return(result);
        }
예제 #4
0
파일: Dot.cs 프로젝트: SergStas/DnfComparer
 public ExtraData.Coordinates[] GetNeighborsCoords(int varIndex)
 {
     ExtraData.Coordinates[] result = new ExtraData.Coordinates[Coordinates.Length];
     Array.Copy(Coordinates, result, Coordinates.Length);
     result[varIndex] = result[varIndex] == ExtraData.Coordinates.IS ? ExtraData.Coordinates.NOT : ExtraData.Coordinates.IS;
     return(result);
 }
예제 #5
0
        public static Function GenerateFunctionFromString(string str)
        {
            int varsCount = (int)Math.Log2(str.Length);

            ExtraData.Coordinates[] coords = new ExtraData.Coordinates[varsCount];
            Dot[] dots = new Dot[str.Length];
            for (int i = 0; i < str.Length; i++)
            {
                bool value = str[i] == '1' ? true : false;
                GetCoords(str, i, coords, varsCount);
                Dot dot = new Dot(value, ExtraData.CopyCoordsArray(coords));
                dots[i] = dot;
            }
            return(new Function(dots));
        }
예제 #6
0
        public static Function KeyboardInput()
        {
            Console.Write("Введите функцию в векторном виде: ");
            string f = Console.ReadLine();

            ExtraData.Coordinates[] coords = new ExtraData.Coordinates[4];
            Dot[,] dots = new Dot[4, 4];
            //if (f.Length != 16)
            //    Console.WriteLine("ты ебанутый?");
            //else
            //{
            for (int i = 0; i < 4; i++)
            {
                for (int j = 0; j < 4; j++)
                {
                    bool value = f[4 * i + j] == '1' ? true : false;
                    GetCoord(f, 4 * i + j, coords);
                    Dot dot = new Dot(value, ExtraData.CopyCoordsArray(coords));
                    dots[i, j] = dot;
                }
            }
            //}
            return(new Function(Function.SwitchCoordinateMatrix(dots)));
        }
예제 #7
0
        public static Function GenerateRandomFunction(int key)
        {
            int    sizeX  = 4;
            int    sizeY  = 4;
            Random random = new Random(key);

            Dot[,] dots = new Dot[4, 4];
            int rnd;

            for (int i = 0; i < sizeY; i++)
            {
                for (int j = 0; j < sizeX; j++)
                {
                    ExtraData.Coordinates[] coordinates = new ExtraData.Coordinates[4];
                    switch (i)
                    {
                    case 0:
                        coordinates[0] = ExtraData.Coordinates.NOT;
                        coordinates[1] = ExtraData.Coordinates.NOT;
                        break;

                    case 1:
                        coordinates[0] = ExtraData.Coordinates.NOT;
                        coordinates[1] = ExtraData.Coordinates.IS;
                        break;

                    case 2:
                        coordinates[0] = ExtraData.Coordinates.IS;
                        coordinates[1] = ExtraData.Coordinates.IS;
                        break;

                    case 3:
                        coordinates[0] = ExtraData.Coordinates.IS;
                        coordinates[1] = ExtraData.Coordinates.NOT;
                        break;
                    }
                    switch (j)
                    {
                    case 0:
                        coordinates[2] = ExtraData.Coordinates.NOT;
                        coordinates[3] = ExtraData.Coordinates.NOT;
                        break;

                    case 1:
                        coordinates[2] = ExtraData.Coordinates.NOT;
                        coordinates[3] = ExtraData.Coordinates.IS;
                        break;

                    case 2:
                        coordinates[2] = ExtraData.Coordinates.IS;
                        coordinates[3] = ExtraData.Coordinates.IS;
                        break;

                    case 3:
                        coordinates[2] = ExtraData.Coordinates.IS;
                        coordinates[3] = ExtraData.Coordinates.NOT;
                        break;
                    }
                    rnd        = random.Next(2);
                    dots[i, j] = new Dot((rnd == 1 ? true : false), coordinates);
                }
            }
            return(new Function(dots));
        }