В шахматах рыцарь может перемещаться только в позиции, отмеченные знаком X, относительно его текущей позиции, отмеченной знаком ♞:
A График Рыцарский представляет собой график , который представляет все юридические ходы рыцаря шахматных фигур на шахматной доске. Каждая вершина этого графа представляет квадрат шахматной доски, а каждое ребро соединяет два квадрата, которые являются движением рыцаря друг от друга.
График выглядит так для стандартной доски 8х8.
Вызов:
Для заданного целого числа N , где 3 ≤ N ≤ 8 , выведите матрицу N-by-N, представляющую доску, где показано количество возможных ходов из каждой позиции. Для N = 8 на выходе будет матрица, показывающая значения каждой вершины на графике выше.
Выходной формат гибкий. Список списков или даже плоский список и т. Д. Являются допустимыми форматами.
Полный набор тестовых случаев:
--- N = 3 ---
2 2 2
2 0 2
2 2 2
--- N = 4 ---
2 3 3 2
3 4 4 3
3 4 4 3
2 3 3 2
--- N = 5 ---
2 3 4 3 2
3 4 6 4 3
4 6 8 6 4
3 4 6 4 3
2 3 4 3 2
--- N = 6 ---
2 3 4 4 3 2
3 4 6 6 4 3
4 6 8 8 6 4
4 6 8 8 6 4
3 4 6 6 4 3
2 3 4 4 3 2
--- N = 7 ---
2 3 4 4 4 3 2
3 4 6 6 6 4 3
4 6 8 8 8 6 4
4 6 8 8 8 6 4
4 6 8 8 8 6 4
3 4 6 6 6 4 3
2 3 4 4 4 3 2
--- N = 8 ---
2 3 4 4 4 4 3 2
3 4 6 6 6 6 4 3
4 6 8 8 8 8 6 4
4 6 8 8 8 8 6 4
4 6 8 8 8 8 6 4
4 6 8 8 8 8 6 4
3 4 6 6 6 6 4 3
2 3 4 4 4 4 3 2
Это код-гольф, поэтому выигрывает самое короткое решение на каждом языке. Пояснения приветствуются!
Ответы:
MATL ,
1716 байтПопробуйте онлайн!
(-1 байт благодаря @Luis Mendo.)
(Относительно центра матрицы, каждый 1 является действительным ходом коня.)
t&l
- Сформировать матрицу nxn из всех 1 (где n - вход). Пусть это будет М.[2K0]
- Вставить массив, содержащий [2, 4, 0] в стекB
- Конвертировать все в двоичный файл, дополнив нулями при необходимости2:&Zv
- Отразите это на обоих измерениях, не повторяя последнюю строку / столбец («индексация симметричного диапазона»). Это дает нам необходимую матрицу К.Z+
- Выполните двумерную свертку K над более ранней матрицей M (conv2(M, K, 'same')
), суммируя 1-е на законных целях перемещения рыцаря для каждой позицииМатрица результата отображается неявно.
источник
11043370BP5e
но это не короче ...Python 2 , 81 байт
Попробуйте онлайн!
источник
JavaScript (ES6), 88 байт
Возвращает строку.
Попробуйте онлайн!
Как?
где представляет неиспользуемый слот.0
Мы устанавливаем каждую ячейку в:( х ,у)
JavaScript (ES7), 107 байт
Наивная реализация, которая на самом деле пробует все ходы.
Попробуйте онлайн!
источник
Желе ,
23 22 1410 байтМонадическая ссылка, дающая плоский список - использует идею, впервые использованную KSab в своем ответе на Python - ходы коня имеют «стороны» 1 и 2, единственные факторы 2.
Попробуйте онлайн! (нижний колонтитул вызывает единственную ссылку программы, а затем форматирует результат в виде сетки)
Кроме того, также для 10 байтов5-√
²Ḷdðạ²§ċ5)
(ходы коня - это все возможные ходы с расстоянием )Как?
Предыдущие 22 байта
Полная программа (из-за
³
).Попробуйте онлайн! (нижний колонтитул вызывает единственную ссылку программы, а затем форматирует результат в виде сетки)
Находит все ходы и подсчет тех , которые землю на борту ,
вероятно ,определенно побиваемый путем вычисления (возможно побиваемый путем изменения «земли на борту» логики).источник
APL (Dyalog Classic) , 18 байт
Попробуйте онлайн!
⎕
оцененный вход N2⍴⎕
две копии н⍳2⍴⎕
индексы матрицы N × N - матрицы векторов длины 2∘.-⍨
вычесть каждую пару индексов из каждой другой пары, получить массив N × N × N × N|
абсолютная величина×/¨
продукт каждого2=
где 2s? вернуть логическую (0/1) матрицуОбратите внимание, что конь движется ± 1 по одной оси и ± 2 по другой, поэтому абсолютное значение произведения этих шагов равно 2. Поскольку 2 не может быть учтено любым другим способом, это справедливо только для ходов рыцаря.
+/+/
сумма по последнему измерению, дваждыисточник
RAD ,
514639 байтПопробуйте онлайн!
Как?
Подсчитывает количество действительных ходов рыцаря для каждого квадрата, видя, какие ходы рыцаря приземлились бы на доске:
источник
Брахилог ,
654033 байтаЭто разбивается на N больше, чем 9. Так что я рад, что N можно только перейти к 8 =)
Попробуйте онлайн!
Brachylog ,
4436 байтЭтот также работает для числа выше 9
Попробуйте онлайн!
источник
⟨∋≡∋⟩
ранний способ для генерации координат матрицы и сохранить в целом 7 байтов (вывод - плоский список, который разрешен OP): попробуйте онлайн!Сетчатка , 161 байт
Попробуйте онлайн! Ссылка включает в себя тестовые случаи. Объяснение:
Преобразовать в одинарный.
Перечислите значение один раз для каждого
_
значения, то есть создайте квадрат.Начиная с
_
середины регулярного выражения, попробуйте сопоставить достаточно контекста, чтобы определить, возможен ли каждый из восьми ходов коня. Каждый шаблон захватывает один символ, если совпадение успешно. Я попытался использовать именованные группы, чтобы число захватов напрямую соответствовало желаемому результату, но это стоило 15 байт.Объедините все удачные снимки и возьмите длину.
источник
Wolfram Language (Mathematica) , 34 байта
Еще одна встроенная Mathematica.
Возвращает плоский список.
Попробуйте онлайн!
источник
Python 2 ,
11410392 байтаПопробуйте онлайн!
источник
C (gcc) ,
133125 байтЭто решение должно работать на доске любого размера.
Попробуйте онлайн!
источник