ASCII-Karte mit fünf Zeichen

9

Hinweis: In diesem Beitrag bedeuten die Begriffe "Zeichen" und "Farbe" im Wesentlichen dasselbe

Dieses Bild:

Beispielkarte

kann dargestellt werden als

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

(Zuordnung von Farben zu ASCII-Zeichen)

Der Vierfarbensatz besagt, dass "bei jeder Trennung einer Ebene in zusammenhängende Regionen, die eine als Karte bezeichnete Figur erzeugt, nicht mehr als vier Farben erforderlich sind, um die Regionen der Karte zu färben, so dass keine zwei benachbarten Regionen dieselbe Farbe haben. Zwei Regionen werden als benachbart bezeichnet, wenn sie eine gemeinsame Grenze haben, die keine Ecke ist, wobei Ecken die Punkte sind, die von drei oder mehr Regionen geteilt werden. " - Wikipedia ( Link )

Dies bedeutet, dass es möglich sein sollte, eine Karte mit vier Farben zu färben, damit keine zwei Teile, die eine Kante teilen, eine Farbe teilen.

Der Algorithmus zum Färben einer Karte mit nur vier Farben ist kompliziert. Bei dieser Herausforderung muss Ihr Programm die Karte nur mit fünf oder weniger Farben färben.

Die zuvor neu eingefärbte Karte könnte folgendermaßen aussehen:

Beispiel Karte mit fünf Farben

die als dargestellt werden könnte

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

oder gleichwertig

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

Herausforderung:

Bei einer "Karte" aus ASCII-Zeichen (wobei jedes Zeichen eine andere Farbe darstellt) "färben" Sie die Karte neu ein (stellen Sie die Karte mit unterschiedlichen ASCII-Zeichen dar), sodass nur fünf oder weniger Farben verwendet werden.

Beispiel:

Eingang:

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

Mögliche Ausgabe:

11111111111122222222223333333311
44444111222255555551111111112444
22222224441111444444444411111111
55555555222222255555553355511111
22222211111111111122222222222222

Erläuterungen:

  • Die Eingabekarte verwendet immer sechs oder mehr Zeichen
  • Sie können in der Ausgabe fünf verschiedene Zeichen verwenden
  • Sie können weniger als fünf verschiedene Zeichen in der Ausgabe verwenden
  • Sie können die Eingabe in einem beliebigen vernünftigen Format vornehmen (einschließlich eines Arrays von Arrays oder eines Arrays von Zeichenfolgen).
  • Dies ist Code-Golf, also gewinnt die kürzeste Antwort.

Sandbox-Link

jkd
quelle
2
Zumindest in Ihrem Beispiel sehe ich, dass die "Karten" keine planaren Graphen sind, da nicht zusammenhängende Bereiche dieselbe Farbe zu haben scheinen. Dies bedeutet, dass Sie leicht ein Diagramm erstellen können, für dessen Färbung 6 oder mehr Farben erforderlich sind. Sollten wir die Karte 121als 3 separate Regionen behandeln, um dieses Problem zu vermeiden, obwohl das Beispiel etwas anderes impliziert, oder sollten wir sie als 2 behandeln und davon ausgehen, dass keine Karte angegeben wird, die mehr als 5 Farben benötigt?
MildlyMilquetoast
2
Es gibt keinen Fehler im Beispiel, es ist nur so, dass das Beispiel so oder so funktionieren könnte - es ist nicht falsch, nur mehrdeutig. Es wäre hilfreich anzugeben, ob verschiedene Regionen, die mit demselben Zeichen gekennzeichnet sind, dieselben oder mehrere Regionen in den Regeln sind.
MildlyMilquetoast
1
Lustigerweise schreibe ich gerade einen Aufsatz über den Beweis des Vierfarbensatzes. Ich muss sagen, der Beweis für das Fünf-Farben-Theorem ist viel weniger kompliziert
MildlyMilquetoast

Antworten:

5

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

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

Probieren Sie es online aus!

Nimmt die Eingabe als Liste von Zeichenfolgen und gibt eine Liste von Listen zurück

fNimmt die Karteneingabe und färbt sie, ggibt alle verbundenen Zeichen und die Menge ihrer Nachbarn zurück, um den Bereich mit einer bestimmten Farbe zu färben.

TFeld
quelle
361 Bytes
ovs
@ovs Danke :-)
TFeld
359 Bytes
Felipe Nardi Batista
@FelipeNardiBatista Danke :)
TFeld
if~-(n!={c}or(i,j)in m):für -2 Bytes
Felipe Nardi Batista