Carte ASCII à cinq caractères

9

Remarque: Dans cet article, les termes «caractère» et «couleur» signifient essentiellement la même chose

Cette image:

exemple de carte

peut être représenté comme

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

(mappage des couleurs aux caractères ascii)

Le théorème des quatre couleurs stipule que "compte tenu de la séparation d'un plan en régions contiguës, produisant une figure appelée carte, pas plus de quatre couleurs ne sont nécessaires pour colorer les régions de la carte afin qu'aucune région adjacente n'ait la même couleur. Deux les régions sont appelées adjacentes si elles partagent une frontière commune qui n'est pas un coin, où les coins sont les points partagés par trois régions ou plus. " - Wikipedia ( lien )

Cela signifie qu'il devrait être possible de colorier une carte à l'aide de quatre couleurs afin qu'aucune des deux parties qui partagent un bord partagent une couleur.

L'algorithme pour colorier une carte en utilisant seulement quatre couleurs est compliqué, donc dans ce défi, votre programme n'a besoin que de colorier la carte en utilisant cinq couleurs ou moins.

La carte précédente recolorée pourrait ressembler à ceci:

exemple cinq carte en couleurs

qui pourrait être représenté comme

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

ou équivalent

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

Défi:

Étant donné une "carte" composée de caractères ascii (où chaque caractère représente une couleur différente), "recolorez" la carte (représentez la carte en utilisant différents caractères ascii) afin qu'elle n'utilise que cinq couleurs ou moins.

Exemple:

Contribution:

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

Sortie possible:

11111111111122222222223333333311
44444111222255555551111111112444
22222224441111444444444411111111
55555555222222255555553355511111
22222211111111111122222222222222

Précisions:

  • La carte d'entrée utilisera toujours six caractères ou plus
  • Vous pouvez utiliser cinq caractères différents dans la sortie
  • Vous pouvez utiliser moins de cinq caractères différents dans la sortie
  • Vous pouvez prendre l'entrée dans n'importe quel format raisonnable (y compris un tableau de tableaux ou un tableau de chaînes)
  • Il s'agit de code-golf, donc la réponse la plus courte l'emporte.

Lien Sandbox

jkd
la source
2
Je vois, au moins dans votre exemple, que les "cartes" ne sont pas en fait des graphiques plans, étant donné que les régions non contiguës semblent avoir la même couleur. Cela signifie que vous pouvez facilement créer un graphique nécessitant 6 couleurs ou plus à colorier. Devrions-nous traiter la carte 121comme 3 régions distinctes pour éviter ce problème, même si l'exemple implique le contraire, ou devons-nous la traiter comme 2, et supposer qu'aucune carte ne sera donnée qui nécessite plus de 5 couleurs?
MildlyMilquetoast
2
Il n'y a pas d'erreur dans l'exemple, c'est juste que l'exemple pourrait fonctionner dans les deux sens - ce n'est pas faux, juste ambigu. Il serait utile de spécifier si différentes régions étiquetées avec le même caractère sont les mêmes régions ou plusieurs régions dans les règles.
MildlyMilquetoast
1
Curieusement, j'écris actuellement un essai sur la preuve du théorème des quatre couleurs. Je dois dire que la preuve du théorème des cinq couleurs est beaucoup moins compliquée
MildlyMilquetoast

Réponses:

5

Python 2 , 375 361 359 357 355 353 350 347 octets

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

Essayez-le en ligne!

Prend l'entrée comme une liste de chaînes et retourne une liste de listes

fprend l'entrée de la carte et la colore, grenvoie tous les personnages connectés et l'ensemble de leurs voisins, la zone peut être colorée avec une couleur distincte.

TFeld
la source
@ovs Merci :-)
TFeld
359 octets
Felipe Nardi Batista
@FelipeNardiBatista Merci :)
TFeld
if~-(n!={c}or(i,j)in m):pour -2 octets
Felipe Nardi Batista