Карта п'яти символів ASCII


9

Примітка. У цій публікації терміни "характер" і "колір" означають по суті одне і те ж

Це зображення:

приклад карта

може бути представлений як

....'''333
.eeee'''3e
..dddd33ee
%%%dd####e

(відображення кольорів на символи ascii)

У чотирьох теоремах кольорів зазначено, що "з урахуванням будь-якого поділу площини на суміжні області, створюючи фігуру, яку називають картою, для забарвлення областей карти потрібно не більше чотирьох кольорів, щоб жодна дві сусідні області не мали однакового кольору. Два" регіони називаються сусідніми, якщо вони поділяють загальну межу, яка не є кутом, де кути - точки, розділені трьома або більше регіонами ". - Вікіпедія ( посилання )

Це означає, що слід розфарбувати карту за допомогою чотирьох кольорів, щоб жодна дві частини, що розділяють край, не мали жодного кольору.

Алгоритм розфарбування карти, використовуючи лише чотири кольори, є складним, тому в цій задачі вашій програмі потрібно лише розфарбувати карту за допомогою п’яти чи менше кольорів.

Попередня перефарбована карта може виглядати так:

приклад п’ять кольорових карт

які можна було б представити як

....'''333
.eeee'''3e
..dddd33ee
333dd....e

або рівнозначно

@@@@$$$!!!
@^^^^$$$!^
@@<<<<!!^^
!!!<<@@@@^

Виклик:

Давши «карту», ​​виконану з символів ascii (де кожен символ являє собою інший колір), «перефарбуйте» карту (представляйте карту, використовуючи різні символи ascii), щоб вона використовувала лише п’ять чи менше кольорів.

Приклад:

Вхід:

%%%%%%%%%%%%##########$$$$$$$$%%
*****%%%####!!!!!!!%%%%%%%%%#^^^
(((((((***>>>>??????????%%%%%%%%
&&&&&&&&$$$$$$$^^^^^^^))@@@%%%%%
^^^^^^%%%%%%%%%%%%##############

Можливий вихід:

11111111111122222222223333333311
44444111222255555551111111112444
22222224441111444444444411111111
55555555222222255555553355511111
22222211111111111122222222222222

Роз'яснення:

  • Вхідна карта завжди буде використовувати шість або більше символів
  • Ви можете використовувати будь-які п'ять різних символів у висновку
  • Ви можете використовувати менше, ніж різні п'ять символів на виході
  • Ви можете взяти вхід у будь-якому розумному форматі (включаючи масив масивів або масив рядків)
  • Це код-гольф, тому найкоротша відповідь виграє.

Посилання в пісочниці


2
Я бачу, щонайменше, у вашому прикладі, що "карти" насправді не є площинними графіками, враховуючи, що неспоміжні області здаються такими ж кольорами. Це означає, що ви могли легко створити графік, який потребував 6 або більше кольорів для фарбування. Чи слід ставитися до карти 121як до 3 окремих регіонів, щоб уникнути цієї проблеми, навіть якщо приклад передбачає інакше, чи ми маємо трактувати її як 2, і припускати, що жодна карта не потребує більше 5 кольорів?
MildlyMilquetoast

2
У прикладі помилки немає, це просто те, що приклад може працювати в будь-якому випадку - це не неправильно, просто неоднозначно. Це допоможе визначити, чи різні регіони, позначені однаковим символом, однакові чи кілька регіонів у правилах.
MildlyMilquetoast

1
Як не дивно, я зараз пишу твір про доказ теоретики чотирьох кольорів.
Треба

Відповіді:


5

Python 2 , 375 361 359 357 355 353 350 347 байт

e=enumerate
C=set('12345')
def f(s):
 s=[map(ord,l)for l in s]
 for i,v in e(s):
	for j,w in e(v):
	 if{w}-C:
		F,N=g([],s,i,j,w)
		for y,x in F:s[y][x]=min(C-N)
 return s
def g(m,s,i,j,c):
 n={s[i][j]}
 if(n^{c}or(i,j)in m)<1:
	m+=(i,j),
	for x,y in(0,1),(0,-1),(1,0),(-1,0):
	 if len(s)>i+x>-1<j+y<len(s[0]):m,N=g(m,s,i+x,j+y,c);n|=N
 return m,n

Спробуйте в Інтернеті!

Приймає введення як список рядків і повертає список списків

fприймає введення карти та розфарбовує її, gповертає всі підключені символи та набір їх сусідів, щоб область може бути пофарбована виразним кольором.



@ovs Дякую :-)
TFeld


@FelipeNardiBatista Спасибі :)
TFeld

if~-(n!={c}or(i,j)in m):за -2 байти
Феліпе Нарді Батіста
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.