Nota: en esta publicación, los términos 'carácter' y 'color' significan esencialmente lo mismo
Esta imagen:
puede ser representado como
....'''333
.eeee'''3e
..dddd33ee
%%%dd####e
(asignación de colores a caracteres ascii)
El teorema de los cuatro colores establece que "dada cualquier separación de un plano en regiones contiguas, produciendo una figura llamada mapa, no se requieren más de cuatro colores para colorear las regiones del mapa, de modo que no haya dos regiones adyacentes que tengan el mismo color. Dos las regiones se llaman adyacentes si comparten un límite común que no es una esquina, donde las esquinas son los puntos compartidos por tres o más regiones ". - Wikipedia ( enlace )
Esto significa que debería ser posible colorear un mapa usando cuatro colores para que no haya dos partes que compartan un borde compartiendo un color.
El algoritmo para colorear un mapa usando solo cuatro colores es complicado, por lo que en este desafío su programa solo necesita colorear el mapa usando cinco o menos colores.
El mapa anterior recolorado podría verse así:
que podría representarse como
....'''333
.eeee'''3e
..dddd33ee
333dd....e
o equivalente
@@@@$$$!!!
@^^^^$$$!^
@@<<<<!!^^
!!!<<@@@@^
Desafío:
Dado un "mapa" hecho de caracteres ascii (donde cada carácter representa un color diferente), "vuelve a colorear" el mapa (representa el mapa usando diferentes caracteres ascii) para que solo use cinco o menos colores.
Ejemplo:
Entrada:
%%%%%%%%%%%%##########$$$$$$$$%%
*****%%%####!!!!!!!%%%%%%%%%#^^^
(((((((***>>>>??????????%%%%%%%%
&&&&&&&&$$$$$$$^^^^^^^))@@@%%%%%
^^^^^^%%%%%%%%%%%%##############
Salida posible:
11111111111122222222223333333311
44444111222255555551111111112444
22222224441111444444444411111111
55555555222222255555553355511111
22222211111111111122222222222222
Aclaraciones:
- El mapa de entrada siempre utilizará seis o más caracteres.
- Puede usar cinco caracteres diferentes en la salida
- Puede usar menos de cinco caracteres diferentes en la salida
- Puede tomar la entrada en cualquier formato razonable (incluida una matriz de matrices o una serie de cadenas)
- Este es el código de golf por lo que gana la respuesta más corta.
121
como 3 regiones separadas para evitar este problema, aunque el ejemplo implica lo contrario, o deberíamos tratarlo como 2, y asumir que no se proporcionará ningún mapa que necesite más de 5 colores?Respuestas:
Python 2 ,
375361359357355353350347 bytesPruébalo en línea!
Toma la entrada como una lista de cadenas y devuelve una lista de listas
f
toma la entrada del mapa y la colorea,g
devuelve todos los caracteres conectados y el conjunto de sus vecinos, al área se puede colorear con un color distinto.fuente
if~-(n!={c}or(i,j)in m):
por -2 bytes