Я использую следующие обозначения для положения битов.
B
CAD
E
Это дает мне 2 ^ 5 возможностей (32), которые я записываю.Я нашел 3 случая из всех возможностей, где A равно 1, но выходной результат должен быть 0. Я мог записать таблицу Карно, но, поскольку у меня есть только 3, я выполняю прямую функцию:
IsZero = (! A | ((B & A & E &! C &! D) | (C & A & D &! E &! B) | (A & B & C & D & E)))
Если вам нужен IsOne, это просто! IsZero.
C # код, чтобы проверить это следующим образом:
class Program
{
static void PrintFunction(int[,] myArray, int yMax, int xMax)
{
for (int y = 0; y < yMax; y++)
{
for (int x = 0; x < xMax; x++)
{
Console.Write(myArray[y, x]);
}
Console.WriteLine();
}
}
static bool A(int x, int y) { if (Input[y, x] == 1) return true; else return false; }
static bool B(int x, int y) { try { if (Input[y - 1, x] == 1) return true; else return false; } catch { return false; } }
static bool C(int x, int y) { try { if (Input[y, x - 1] == 1) return true; else return false; } catch { return false; } }
static bool D(int x, int y) { try { if (Input[y, x + 1] == 1) return true; else return false; } catch { return false; } }
static bool E(int x, int y) { try { if (Input[y + 1, x] == 1) return true; else return false; } catch { return false; } }
static int[,] Input = { { 1,0,0,1,1,1,0,0 }, {1,0,0,0,0,1,0,0}, { 1,1,1,1,1,1,0,0 }, {1,0,0,0,0,0,1,1} , {1,0,1,0,0,0,1,0} };
static int[,] OutputVH = new int[5, 8];
static int[,] Solution = { { 1,0,0,1,0,1,0,0}, { 0,0,0,0,0,0,0,0}, { 1,0,0,0,0,1,0,0}, { 0,0,0,0,0,0,1,1} , {1,0,1,0,0,0,1,0} };
static int xMax = 8;
static int yMax = 5;
static void Main(string[] args)
{
Console.WriteLine("Both Filterings");
for (int y = 0; y < yMax; y++)
{
for (int x = 0; x < xMax; x++)
{
bool isZero = (!A(x, y) | ((B(x, y) & A(x, y) & E(x, y) & !C(x,y) & !D(x,y)) | (C(x, y) & A(x, y) & D(x, y) & !E(x,y) & !B(x,y)) | (A(x, y) & B(x, y) & C(x, y) & D(x, y) & E(x, y))));
OutputVH[y, x] = (isZero ? 0 : 1);
}
}
PrintFunction(OutputVH, yMax, xMax);
bool SolutionFound = true;
for (int y = 0; y < yMax; y++)
for (int x = 0; x < xMax; x++)
if (OutputVH[y, x] != Solution[y, x]) SolutionFound = false;
if (SolutionFound) Console.WriteLine("Found solution!");
}
}
Я оставлю это вам, чтобы упростить это далее с помощью логического значениялогика, если необходимо.