Вот удар.
Это ужасно неэффективно, так как я вычисляю декартово произведение двух векторов, а затем сравниваю каждую комбинацию кортежей.Это также не масштабируется за 2 измерения.
Кроме того, я беспокоюсь, что это не совсем то, что вы ищете, потому что я решаю каждое уравнение независимо.Если вы ищете все целочисленные значения, которые удовлетворяют 3-мерному пространству, ограниченному системой неравенств, то для меня это немного запутывает мозг, хотя и очень интересно.
Кто-нибудь на Python?
#sample data
A =[12,2,15,104,54,20]
B =[10,20,30,40,50,60]
C =[100,200,300,400,500,600]
import itertools
def eq1():
product = itertools.product(B,A) #construct Cartesian product of 2 lists
#list(product) returns a Cartesian product of tuples
# [(12, 10), (12, 20), (12, 30)... (2, 10), (2, 20)... (20, 60)]
#now, use a list comprehension to compare the values in each tuple,
# generating a list of only those that satisfy the inequality...
# then return the length of that list - which is the count
return len([ Bval for Bval, Aval in list(product) if Bval > Aval])
def eq2():
product = itertools.product(C,B)
return len([ Cval for Cval, Bval in list(product) if Cval>Bval])
def eq3():
product = itertools.product(A,C)
return len([ Aval for Aval, Cval in list(product) if Aval>Cval])
print eq1()
print eq2()
print eq3()
Этот пример данных возвращает:
eq1: 21
eq2: 36
eq3: 1
Но не знает, как объединить эти ответыв одно целое число из всех 3 - между списками произойдет некое объединение.
Мой тест на здравомыслие приведен в уравнении 3, которое возвращает «1» - потому что только когда Aval = 104 делает этоудовлетворять Aval> Cval для Cval только на 100.