У моих детей есть алфавитный коврик для игры, примерно такой:
После нескольких месяцев, когда плитки коврика были расположены в случайном порядке, я устала и разместила все плитки коврика, сгруппированные по секциям в соответствии с их фоновыми цветами. Итак, если буквы представляют цвет фона, я получил коврик, как это:
AABBCDDDE
ABBCCCDEE
ABCCCCDDE
AACCCDDEE
AAAACCCCE
AAAAAACCC
Таким образом, для цветов A, B, C, D и E всегда есть возможность соединить все плитки с одинаковым фоновым цветом в мате по горизонтали или по вертикали. Это то, что я называю матом, правильно сгруппированным по цветам . Вы можете увидеть группы для предыдущего примера в следующих таблицах:
AA
A
A
AA
AAAA
AAAAAA
BB
BB
B
C
CCC
CCCC
CCC
CCCC
CCC
DDD
D
DD
DD
E
EE
E
EE
E
Кроме того, существует только одна группа для каждого цвета, поэтому это будет недопустимо:
ABA
ABA
Потому что плитки цвета А не сгруппированы только в одну группу. Это также не будет действительным, потому что плитки не соединяются ни горизонтально, ни вертикально:
AB
BA
Соревнование
Учитывая двумерный массив символов в печатаемом диапазоне ASCII (не обязательно должен быть квадратным, если размер обоих измерений равен или больше 1), проверьте, представляет ли массив коврик, правильно сгруппированный по цветам (каждый отдельный символ в массиве представляет свой цвет). Входные данные могут быть в любом приемлемом формате, если они представляют собой двумерный массив символов (двумерный массив символов, массив строк одинаковой длины и т. Д.), А выходные данные должны представлять собой пару истинных и ложных значений (0 / 1, 't' / 'f', true / false, независимо от того, что что-то возвращено и возвращаемые значения согласованы для всех входных данных).
Это код-гольф, поэтому может быть самая короткая программа / функция / метод / лямбда для каждого языка!
Примеры
A truthy
AB
AB truthy
AB
BA falsey
ABCDE truthy
ABCDC falsey
**::dd22
***:d222
*:::::22 truthy
$$$%%%&&
$$%%&&&&
&&$$$%&& falsey
AABBCDDDE
ABBCCCDEE
ABCCCCDDE
AACCCDDEE
AAAACCCCE
AAAAAACCC truthy
AABB
ABBA
AAAA truthy
AAAB
AAAA
AAAA truthy
Мой коврик правильно сгруппирован по цветам
(Я все еще должен исправить эти границы ...)
Ответы:
MATL ,
1615 байтВвод - это двумерный массив символов (строки разделены
;
). Выход0
если ввод квалифицируется или1
иным образом.Попробуйте онлайн!Или проверьте все тестовые случаи .
объяснение
Код обязательно проверяет, имеет ли каждый символ на входе только один подключенный компонент, учитывая 4-связность (то есть отсутствие диагоналей).
Повторные символы обрабатываются многократно (что гораздо сложнее, чем дедупликация).
источник
Befunge-93, 317 байт
Редактировать: Исправлено для правильного подсчета байтов. Также можно играть в гольф дальше
Отпечатки 1 как правдивые, 0 как фальси
Попробуйте онлайн
Вот визуализация пути, по которому идет указатель
Примечание: это для старой версии
Как это устроено
Вот какой-то быстрый и грязный псевдокод
В основном, после сохранения ввода, он проходит через все это, проверяя каждый пробел. Когда он находит пробел с символом в нем, он добавляет координаты в стек. Затем он рекурсивно проверяет пробелы вокруг него для того же символа, устанавливая для каждого пробела значение 0. Когда он исчерпал раздел этого символа, он проверяет, имел ли этот символ раздел. Если это так, верните 0. Если нет, добавьте его в массив символов. Как только он прошел всю сетку без дубликатов, он возвращает 1.
Для людей, знакомых с Befunge, вот раздельная версия кода
источник
J, 66 байт
c
определяет глагол , который говорит вам , если матрица из единиц и нулей с onnected. Он рассматривает одиночные как особый случай истины. В противном случае он берет ортогональный счетчик соседей каждой ячейки, затем знак этого счетчика, а затем умножает его на исходную матрицу: если это произведение равно исходной матрице, то оно связно.Подсчет соседей достигается путем сдвига во всех 4 направлениях, а затем суммирования. Сдвиг в 4 направлениях достигается с помощью функции «
x
-arg by a table» rotate / shift|.
Наконец, сам ответ достигается путем создания матрицы единиц / нулей для каждого уникального
~.
элемента входных данных, а затем обеспечения связи всех этих матриц. Это глагол во второй строке.Попробуйте онлайн!
источник
JavaScript (ES6), 114 байт
Принимает ввод в виде массива строк. Возвращает
0
или1
.Контрольные примеры
Показать фрагмент кода
Отформатировано и прокомментировано
источник
Wolfram Language (Mathematica) , 96 байт
Попробуйте онлайн!
Вводит в виде 2D списка символов: например
{{"A","B"},{"C","D"}}
,.
Характер\[Transpose]
.Как это устроено
Для каждого символа
c
на входе, беретSubgraph
изGridGraph
одного и того же ,Dimensions
как на входе , который соответствует каждому ,Position
в которомc
происходит, и проверяет , является ли этоConnectedGraphQ
.источник
Python 2 , 247 байт
Попробуйте онлайн!
источник
JavaScript (ES6), 181 байт
Всякий раз, когда новый цветовой тайл найден, заполните подключенные пустые строки. Если коврик правильно сгруппирован по цветам, все плитки должны быть заполнены пустыми строками.
Тестовый код
Показать фрагмент кода
источник