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处理,或者首先将其从迭代中排除。您可以通过额外的内存需求来支付更简单的公式