Эта задача основана на следующей головоломке: Вам дается n
по n
сетке с n
клетками , помеченных. Ваша задача состоит в том, чтобы разбить сетку на n
части, где каждая часть состоит из точно n
ячеек, каждая из которых содержит ровно одну отмеченную ячейку.
пример
Вот головоломка слева и ее (уникальное) решение справа:
Вызов
Вам будет предоставлен набор n
координат с нулевым индексом в любом приемлемом формате.
[(0,0), (0,3), (1,0), (1,1), (2,2)]
И ваша задача - написать программу, которая возвращает любое допустимое разделение (опять же, в любом разумном формате).
[
[(0,0), (0,1), (0,2), (1,2), (1,3)],
[(0,3), (0,4), (1,4), (2,4), (3,4)],
[(1,0), (2,0), (3,0), (4,0), (4,1)],
[(1,1), (2,1), (3,1), (3,2), (4,2)],
[(2,2), (2,3), (3,3), (4,3), (4,4)]
]
Если у головоломки нет решения, программа должна указать это, выдав ошибку или вернув пустое решение.
Примеры ввода / вывода
[(0,0)] => [[(0,0)]]
[(0,0), (1,1)] => [
[(0,0), (1,0)],
[(0,1), (1,1)]
]
[(0,0), (0,1), (1,0)] => [] (no solution)
[(0,0), (0,1), (0,2)] => [
[(0,0), (1,0), (2,0)],
[(0,1), (1,1), (2,1)],
[(0,2), (1,2), (2,2)],
]
[(0,0), (0,2), (1,2)] => [
[(0,0), (1,0), (2,0)],
[(0,1), (0,2), (1,1)],
[(1,2), (2,1), (2,2)],
]
счет
Это код-гольф , поэтому выигрывает самый короткий код.
Это было вдохновлено этим вопросом обмена математическими стеками .
—
Питер Кейджи
@ Arnauld, это похоже на загадки Shikaku, «цель состоит в том, чтобы разделить сетку на прямоугольные и квадратные части». В этом случае такого ограничения нет.
—
Питер Кейджи
Извините за путаницу. Я думаю, что где-то в песочнице может быть вызов Сикаку, или, может быть, я планировал сделать его сам в какой-то момент - я точно не помню. В любом случае, я думал, что это было то же самое на первый взгляд.
—
Arnauld
Почему результат является двумерным массивом координат? Я не понимаю, что там выражается ... Разве это не может быть двухмерный массив индекса массива? Например, строка 3, столбец 2 содержит раздел с координатами в индексе 4?
—
Оливье Грегуар
Можем ли мы предположить, что каждая область может быть нарисована, начиная с опорных координат, как показано в примере? Я только что понял, что я неосознанно принял это как должное.
—
Arnauld