Hinweis: In diesem Beitrag bedeuten die Begriffe "Zeichen" und "Farbe" im Wesentlichen dasselbe
Dieses Bild:
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:
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.
121
als 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?Antworten:
Python 2 ,
375361359357355353350347 BytesProbieren Sie es online aus!
Nimmt die Eingabe als Liste von Zeichenfolgen und gibt eine Liste von Listen zurück
f
Nimmt die Karteneingabe und färbt sie,g
gibt alle verbundenen Zeichen und die Menge ihrer Nachbarn zurück, um den Bereich mit einer bestimmten Farbe zu färben.quelle
if~-(n!={c}or(i,j)in m):
für -2 Bytes