Я начинаю набрасывать структуру рекурсивного алгоритма, который будет строить список смежности пересечений гексагональных плиток на игровом поле в стиле Settlers of Catan. Однако это не неотложная проблема, которую мне нужно решить.
Проблема, с которой я столкнулся, можно найти в выводе, который я вставил под образцом кода. Некоторые значения в первой и последней строках вывода кажутся строками без видимой причины.
Я надеюсь, что более опытный разработчик Эликсира поймет причину искаженного вывода и сможет объяснить, почему это происходит и что с этим делать.
def recurse_outer() do
list = [Enum.into(0..5, []),
Enum.into(6..23, []),
Enum.into(24..53, [])
]
Enum.map(list, &recurse_inner(&1))
end
defp recurse_inner(list, index \\ 0, result \\ [])
defp recurse_inner([head | tail] = list, index, result) do
next =
case tail do
[next | tail] -> next
[] -> :no_next
end
adjacencies = [head, next]
recurse_inner(tail, index + 1, [adjacencies | result])
end
defp recurse_inner([], _, result), do:
Enum.reverse(result)
выход:
iex(159)> Board.recurse_outer
[[[0, 1], [1, 2], [2, 3], [3, 4], [4, 5], [5, :no_next]],
[[6, 7], '\a\b', '\b\t', '\t\n', '\n\v', '\v\f', '\f\r', [13, 14], [14, 15],
[15, 16], [16, 17], [17, 18], [18, 19], [19, 20], [20, 21], [21, 22],
[22, 23], [23, :no_next]],
[[24, 25], [25, 26], [26, 27], [27, 28], [28, 29], [29, 30], [30, 31],
[31, 32], ' !', '!"', '"#', '#$', '$%', '%&', '&\'', '\'(', '()', ')*', '*+',
'+,', ',-', '-.', './', '/0', '01', '12', '23', '34', '45', [53, :no_next]]]