Prolog 如何得到六边形的对角线?
形状如下:Prolog 如何得到六边形的对角线?,prolog,geometry,Prolog,Geometry,形状如下: A,B,C D,E,F,G H,I,J,K,L M,N,O,P Q,R,S A,B,C . . D,E,F,G . H,I,J,K,L . M,N,O,P . . Q,R,S 我想把对角线限制为一定的和,即: A+D+H=B+E+I+M=…=L+P+S=常数和 我想把列表展平,通过计算每一级的跳数,尝试计算出一些数学公式来获得正确的元素。到目前为止,我只有以下几点: matrix([[1,2,3],[4,5,6,7][8,9,10,11,12],[13,14,15,
A,B,C
D,E,F,G
H,I,J,K,L
M,N,O,P
Q,R,S
A,B,C . .
D,E,F,G .
H,I,J,K,L
. M,N,O,P
. . Q,R,S
我想把对角线限制为一定的和,即:
A+D+H=B+E+I+M=…=L+P+S=常数和
我想把列表展平,通过计算每一级的跳数,尝试计算出一些数学公式来获得正确的元素。到目前为止,我只有以下几点:
matrix([[1,2,3],[4,5,6,7][8,9,10,11,12],[13,14,15,16],[17,18,19]).
check(M) :-
matrix(M),
flatten(M, L),
check_sum(L, 1).
然而,论文中的数学方法似乎不太好。有什么想法吗
编辑:
我无法计算出数学规则(每个对角线的跳跃),也许我应该遵循另一种方法,而不是展平法…你可以做的一件事是像这样写六边形:
A,B,C
D,E,F,G
H,I,J,K,L
M,N,O,P
Q,R,S
A,B,C . .
D,E,F,G .
H,I,J,K,L
. M,N,O,P
. . Q,R,S
然后,一种对角线将有固定的x条目(“列”),另一种固定的y条目(“行”)和第三个固定的x−y差(“下降对角线”)。如果将其展平,则必须以某种方式表示形状周围的空单元格,并在迭代时对其进行dkip处理,或者首先将其从迭代中排除。您可以通过额外的内存需求来支付更简单的公式