2015-11-26 3 views
2

форма, как это:Как получить диагонали шестиугольника?

A,B,C 
D,E,F,G 
H,I,J,K,L 
M,N,O,P 
    Q,R,S 

и я хочу тягот диагонали на определенную сумму, а именно:

А + Д + Н = В + E + I + M =. .. = L + P + S = CONST_SUM


Я думал, уплощение списка и пытаемся выработать какие-то математические формулы, чтобы получить правильные элементы, путем вычисления хмеля на каждом уровне. До сих пор, у меня есть только это:

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). 

Однако математический подход не кажется, хорошо идет в идеях paper..Any?


EDIT:

Я не мог понять, математические правила (хмель для каждой диагонали), может быть, есть другой подход, который я должен следовать, а не уплощение один ...

ответ

2

Одна вещь, которую вы можете сделать, это написать шестиугольник искажены, как это:

A,B,C . . 
D,E,F,G . 
H,I,J,K,L 
. M,N,O,P 
. . Q,R,S 

Тогда один вид диагоналей будет иметь фиксированные х записи («столбцы»), другой фиксированного у входа («строки»), а третья фиксированный х - у разности («нисходящая диагональ»). Если вы сглаживаете это, вы должны каким-то образом представлять пустые ячейки, окружающие фигуру, и либо выполнять их, либо итерации, либо исключать их из итерации в первую очередь. Вы платите за более простую формулу за счет дополнительных требований к памяти.

+0

Это был мой первоначальный подход !!! Но с '. A B C .'. – gsamaras

Смежные вопросы