Примечание: в этом посте термины «характер» и «цвет» означают одно и то же
Это изображение:
может быть представлен как
....'''333
.eeee'''3e
..dddd33ee
%%%dd####e
(отображение цветов на символы ascii)
Теорема о четырех цветах гласит, что «при любом разделении плоскости на смежные области, при создании фигуры, называемой картой, требуется не более четырех цветов для окраски областей карты, чтобы никакие две соседние области не имели одинакового цвета. Два области называются смежными, если они имеют общую границу, которая не является углом, где углы являются точками, общими для трех или более областей ". - Википедия ( ссылка )
Это означает, что должна быть возможность раскрасить карту четырьмя цветами, чтобы две части, имеющие общий край, не имели общего цвета.
Алгоритм раскраски карты только четырьмя цветами сложен, поэтому в этой задаче вашей программе нужно раскрасить карту только пятью или менее цветами.
Предыдущая измененная карта может выглядеть так:
который может быть представлен как
....'''333
.eeee'''3e
..dddd33ee
333dd....e
или эквивалентно
@@@@$$$!!!
@^^^^$$$!^
@@<<<<!!^^
!!!<<@@@@^
Вызов:
Учитывая «карту», составленную из символов ascii (где каждый символ представляет свой цвет), «перекрасьте» карту (представьте карту, используя разные символы ascii), чтобы она использовала только пять или менее цветов.
Пример:
Входные данные:
%%%%%%%%%%%%##########$$$$$$$$%%
*****%%%####!!!!!!!%%%%%%%%%#^^^
(((((((***>>>>??????????%%%%%%%%
&&&&&&&&$$$$$$$^^^^^^^))@@@%%%%%
^^^^^^%%%%%%%%%%%%##############
Возможный вывод:
11111111111122222222223333333311
44444111222255555551111111112444
22222224441111444444444411111111
55555555222222255555553355511111
22222211111111111122222222222222
Разъяснения:
- Карта ввода всегда будет использовать шесть или более символов
- Вы можете использовать любые пять разных символов в выводе
- Вы можете использовать менее пяти разных символов в выводе
- Вы можете принимать входные данные в любом приемлемом формате (включая массив массивов или массив строк)
- Это код-гольф, поэтому выигрывает самый короткий ответ.
121
как 3 отдельных региона, чтобы избежать этой проблемы, даже если пример подразумевает иное, или мы должны рассматривать ее как 2, и предположить, что не будет дана карта, которая требует более 5 цветов?Ответы:
Python 2 ,
375361359357355353350347 байтПопробуйте онлайн!
Принимает ввод как список строк и возвращает список списков
f
берет входные данные карты и раскрашивает их,g
возвращает все связанные символы и набор их соседей, область может быть окрашена в отдельный цвет.источник
if~-(n!={c}or(i,j)in m):
за -2 байта