Easy As ABC, также известная как «End View», представляет собой головоломку, где вам дают пустую сетку с буквами вокруг нее; Вы должны частично заполнить сетку так, чтобы в каждой строке и столбце было ровно по одной букве; кроме того, буквы в конце строки (или столбца) должны быть первой буквой, видимой в этой строке (или столбце) с этого направления. Ваша цель в этом кодовом гольфе - решить головоломку Easy As ABC.
Например, вот загадка Easy As ABC из MIT Mystery Hunt этого года с использованием букв MIC:
Решение:
(Извините за артефакты на C; я пытался отредактировать не относящуюся к делу информацию из остальной части головоломки.)
I / O
Входные данные будут массивом строк или строк, возможно, с разделителями. Это начнется в верхнем левом углу и пойдет по часовой стрелке. Например, приведенная выше головоломка может быть введена так:
".CMM.M|....IM|.....I|C.ICI."
Выход должен быть решенной сеткой, с границей или без нее. Это может быть массив символов, массив строк или любой другой удобный формат. Тот же самый «пустой» символ должен быть принят как ввод и отображен как вывод, но этот пустой символ может быть чем угодно. Если они являются одиночными строками, то и вход, и выход должны иметь одинаковый разделитель (между сторонами для ввода и строки для вывода) или вообще не иметь разделителя.
Для неразрешимых головоломок вы должны вывести что-то, что не может быть ошибочно принято за решение. Вы можете предположить, что ни у одной головоломки нет более одного решения.
Вы должны разрешить любое количество букв и сетки любого размера; все используемые буквы появятся на границе сетки.
Это код-гольф : как обычно, выигрывает самый короткий код!
Тестовые случаи
"T.AA..|.T.TSS|..TST.|A...SS"
"R.RU..|B.B..B|.UR.UB|UR..B."
"N...NK|E.NK.K|..KK..|....EK"
"CA..DBD|.B..CC.|.D.DEB.|DB.A..A"
"...DDEBE|DC..EBBD|BA..ABF.|E..FECDE"
источник
Ответы:
PHP, 1111 байт
минус байты, удаляющие символы новой строки
Интернет - версия работает только с Testcases длиной 6
короткий обходной путь
сделать все перестановки
заполнить 2 массива перестановками $ x $ y
переключаться между двумя функциями до тех пор, пока существует только одно решение в каждой строке массива x
функция i: найти пересечения в сетке и переставить капли
функция c: проверяет столбцы в каждом массиве уникальных символов и удаляет перестановки в других строках для массива $ x и $ y
источник