Вы просто должны решить это уравнение:
A + C + E = x(A + B + C) + y(C + D + E) + z(B + C + D)
Примерно так:
A + C + E = A * (x) + B * (x + z) + C* (y + z) + D * (z + y) + E * (y)
A * (x - 1) + B * (x + z) + C * (x + y + z- 1) + D * (z + y) + E * (y - 1) = 0
Поскольку A, B, C, D и E всегда не равны нулю, поэтому имеем:
x - 1 = 0
x + z = 0
x + y + z - 1 = 0
z + y = 0
y - 1 = 0
Что дает y = 1, z = -1 и x = 1 или
A + C + E = (A + B + C) + (C + D + E) - (B + C + D).
Так что теперь мы просто должны сделать то же самое в Python.
import numpy as np
shadow = [1,0,1,0,1]
big_circle = [1,1,1,0,0]
small_circle = [0,0,1,1,1]
triangle = [0,1,1,1,0]
universe = [big_circle, small_circle, triangle]
print("shadow : " + str(shadow) )
print("universe : " + str(universe) )
variables = [0] * len(universe)
equations = []
for key in zip(*universe):
equations.append(list(key))
print("equations : " + str(equations) )
a = np.array(equations)
b = np.array(shadow)
x = np.linalg.lstsq(a,b)
print("Result: \n" )
print( str(x[0]) )
Вот что вы получите:
shadow : [1, 0, 1, 0, 1]
universe : [[1, 1, 1, 0, 0], [0, 0, 1, 1, 1], [0, 1, 1, 1, 0]]
equations : [[1, 0, 0], [1, 0, 1], [1, 1, 1], [0, 1, 1], [0, 1, 0]]
Result:
[ 1. 1. -1.]
Если вы сделаете это для других настроек и получите нецелочисленный результат, то заштрихованную область невозможно будет создать как комбинацию фигур, предоставленных программой.