Nota: Nesta postagem, os termos 'caractere' e 'cor' significam essencialmente a mesma coisa
Esta imagem:
pode ser representado como
....'''333
.eeee'''3e
..dddd33ee
%%%dd####e
(mapeando cores para caracteres ascii)
O teorema das quatro cores afirma que "dada qualquer separação de um plano em regiões contíguas, produzindo uma figura chamada mapa, não são necessárias mais de quatro cores para colorir as regiões do mapa, de modo que duas regiões adjacentes não tenham a mesma cor. Dois as regiões são chamadas adjacentes se compartilharem um limite comum que não seja um canto, onde os cantos são os pontos compartilhados por três ou mais regiões ". - Wikipedia ( link )
Isso significa que deve ser possível colorir um mapa usando quatro cores, de modo que duas partes que compartilham uma borda compartilhem uma cor.
O algoritmo para colorir um mapa usando apenas quatro cores é complicado, portanto, nesse desafio, seu programa precisa apenas colorir o mapa usando cinco ou menos cores.
O mapa anterior recolorido pode ficar assim:
que poderia ser representado como
....'''333
.eeee'''3e
..dddd33ee
333dd....e
ou equivalente
@@@@$$$!!!
@^^^^$$$!^
@@<<<<!!^^
!!!<<@@@@^
Desafio:
Dado um "mapa" feito de caracteres ASCII (onde cada caractere representa uma cor diferente), "recolorir" o mapa (representa o mapa usando caracteres ASCII diferentes) para que ele use apenas cinco ou menos cores.
Exemplo:
Entrada:
%%%%%%%%%%%%##########$$$$$$$$%%
*****%%%####!!!!!!!%%%%%%%%%#^^^
(((((((***>>>>??????????%%%%%%%%
&&&&&&&&$$$$$$$^^^^^^^))@@@%%%%%
^^^^^^%%%%%%%%%%%%##############
Saída possível:
11111111111122222222223333333311
44444111222255555551111111112444
22222224441111444444444411111111
55555555222222255555553355511111
22222211111111111122222222222222
Esclarecimentos:
- O mapa de entrada sempre usará seis ou mais caracteres
- Você pode usar quaisquer cinco caracteres diferentes na saída
- Você pode usar menos de cinco caracteres diferentes na saída
- Você pode receber a entrada em qualquer formato razoável (incluindo uma matriz de matrizes ou uma sequência de strings)
- Isso é código-golfe, então a resposta mais curta vence.
121
como três regiões separadas para evitar esse problema, mesmo que o exemplo implique de outra forma, ou devemos tratá-lo como 2 e assumir que nenhum mapa será fornecido com mais de 5 cores?Respostas:
Python 2 ,
375361359357355353350347 bytesExperimente online!
Recebe entrada como uma lista de strings e retorna uma lista de listas
f
pega a entrada do mapa e a colore,g
retorna todos os caracteres conectados e o conjunto de seus vizinhos para a área que pode ser colorida com uma cor distinta.fonte
if~-(n!={c}or(i,j)in m):
para -2 bytes