Mappa ASCII a cinque caratteri


9

Nota: in questo post, i termini "carattere" e "colore" significano essenzialmente la stessa cosa

Questa immagine:

mappa di esempio

può essere rappresentato come

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

(mappatura dei colori sui caratteri ASCII)

Il teorema dei quattro colori afferma che "data qualsiasi separazione di un piano in regioni contigue, producendo una figura chiamata mappa, non sono necessari più di quattro colori per colorare le regioni della mappa in modo tale che due regioni adiacenti non abbiano lo stesso colore. Due le regioni sono chiamate adiacenti se condividono un confine comune che non è un angolo, dove gli angoli sono i punti condivisi da tre o più regioni. " - Wikipedia ( link )

Ciò significa che dovrebbe essere possibile colorare una mappa usando quattro colori in modo tale che due parti che condividono un bordo non condividano un colore.

L'algoritmo per colorare una mappa usando solo quattro colori è complicato, quindi in questa sfida il tuo programma deve solo colorare la mappa usando cinque o meno colori.

La mappa precedente ricolorata potrebbe apparire così:

esempio cinque mappa dei colori

che potrebbe essere rappresentato come

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

o equivalentemente

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

Sfida:

Data una "mappa" fatta di caratteri ASCII (dove ogni personaggio rappresenta un colore diverso), "ricolora" la mappa (rappresenta la mappa usando caratteri ASCII diversi) in modo che utilizzi solo cinque o meno colori.

Esempio:

Ingresso:

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

Uscita possibile:

11111111111122222222223333333311
44444111222255555551111111112444
22222224441111444444444411111111
55555555222222255555553355511111
22222211111111111122222222222222

chiarimenti:

  • La mappa di input utilizzerà sempre sei o più caratteri
  • È possibile utilizzare cinque caratteri diversi nell'output
  • È possibile utilizzare meno di cinque caratteri diversi nell'output
  • È possibile accettare l'input in qualsiasi formato ragionevole (incluso un array di array o un array di stringhe)
  • Questo è code-golf, quindi vince la risposta più breve.

Link sandbox


2
Vedo, almeno nel tuo esempio, che le "mappe" non sono in realtà grafici planari, dato che le regioni non contigue sembrano avere lo stesso colore. Ciò significa che è possibile creare facilmente un grafico che richiede 6 o più colori per colorare. Dovremmo considerare la mappa 121come 3 regioni separate per evitare questo problema, anche se l'esempio implica diversamente, oppure dovremmo trattarla come 2 e supporre che non verrà fornita una mappa che richiede più di 5 colori?
MildlyMilquetoast,

2
Non c'è un errore nell'esempio, è solo che l'esempio potrebbe funzionare in entrambi i modi - non è sbagliato, solo ambiguo. Aiuterebbe a specificare se le diverse regioni etichettate con lo stesso carattere sono le stesse o più regioni nelle regole.
MildlyMilquetoast,

1
Stranamente, sto scrivendo un saggio sulla dimostrazione del teorema dei quattro colori in questo momento. Devo dire che la dimostrazione del teorema dei cinque colori è molto meno complicata
MildlyMilquetoast

Risposte:


5

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

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

Provalo online!

Prende l'input come un elenco di stringhe e restituisce un elenco di elenchi

fprende l'input della mappa e lo colora, grestituisce tutti i personaggi collegati e l'insieme dei loro vicini, l'area può essere colorata con un colore distinto.



@ovs Grazie :-)
TFeld il


@FelipeNardiBatista Thanks :)
TFeld

if~-(n!={c}or(i,j)in m):per -2 byte
Felipe Nardi Batista,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.