Beş Karakter ASCII Haritası


9

Not: Bu gönderide, 'karakter' ve 'renk' terimleri aslında aynı anlama gelir

Bu görüntü:

örnek harita

olarak temsil edilebilir

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

(renkleri ascii karakterlerle eşleme)

Dört renk teoremi, "bir düzlemin bitişik bölgelere ayrılması durumunda, harita adı verilen bir şekil üreterek, haritanın bölgelerini renklendirmek için dörtten fazla renk gerekmediğini, böylece iki bitişik bölgenin aynı renge sahip olmayacağını belirtir. köşeler üç veya daha fazla bölgenin paylaştığı noktalar olduğu bir köşe olmayan ortak bir sınırı paylaşıyorlarsa bölgelere bitişik denir. " - Wikipedia ( bağlantı )

Bu, bir kenarı paylaşan iki parçanın bir rengi paylaşmaması için dört renk kullanarak haritayı renklendirmenin mümkün olması gerektiği anlamına gelir.

Bir haritayı yalnızca dört renk kullanarak renklendirme algoritması karmaşıktır, bu nedenle bu meydan okumada programınızın haritayı yalnızca beş veya daha az renk kullanarak renklendirmesi gerekir.

Yeniden renklendirilen önceki harita şöyle görünebilir:

örnek beş renk haritası

hangi olarak temsil edilebilir

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

Veya eşdeğer olarak

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

Meydan okuma:

Ascii karakterlerden (her karakterin farklı bir rengi temsil ettiği) bir "harita" verildiğinde, haritayı "yeniden renklendir" (yalnızca farklı veya ascii karakterleri kullanarak haritayı temsil eder), böylece yalnızca beş veya daha az renk kullanır.

Misal:

Giriş:

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

Olası çıktı:

11111111111122222222223333333311
44444111222255555551111111112444
22222224441111444444444411111111
55555555222222255555553355511111
22222211111111111122222222222222

Açıklamalar:

  • Giriş haritası her zaman altı veya daha fazla karakter kullanır
  • Çıktıda beş farklı karakter kullanabilirsiniz
  • Çıktıda farklı beş karakterden daha azını kullanabilirsiniz
  • Girdiyi makul bir biçimde (diziler dizisi veya dizeler dizisi dahil) alabilirsiniz
  • Bu kod golf yani kısa cevap kazanır.

Korumalı alan bağlantısı


2
En azından örneğinizde, bitişik olmayan bölgelerin aynı renkte olması gerektiği göz önüne alındığında, "haritaların" aslında düzlemsel grafikler olmadığını görüyorum. Bu, renklendirmek için 6 veya daha fazla renge ihtiyaç duyan bir grafiği kolayca oluşturabileceğiniz anlamına gelir. 121Örnek aksini ima etse bile, bu sorunu önlemek için haritayı 3 ayrı bölge olarak mı ele almalıyız , yoksa 2 olarak ele almalı mı ve 5'ten fazla renge ihtiyaç duyulan hiçbir harita verilmeyeceğini mi varsaymalıyız?
MildlyMilquetoast

2
Örnekte bir hata yok, sadece örnek her iki şekilde de işe yarayabilir - bu yanlış değil, sadece belirsiz. Aynı karakterle etiketlenmiş farklı bölgelerin kurallarda aynı mı yoksa birden fazla bölge mi olduğunu belirtmek yardımcı olacaktır.
MildlyMilquetoast

1
İşin tuhafı, şu anda dört renk teoreminin kanıtı üzerine bir deneme yazıyorum.
Söylemeliyim

Yanıtlar:


5

Piton 2 , 375 361 359 357 355 353 350 347 bayt

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

Çevrimiçi deneyin!

Girdiyi dizeler listesi olarak alır ve bir liste listesi döndürür

fharita girişini alır ve renklendirir, gbağlı tüm karakterleri ve komşu kümelerini döndürür, alana farklı bir renkle renklendirilebilir.



@ovs Teşekkürler :-)
TFeld


@FelipeNardiBatista Teşekkürler :)
TFeld

if~-(n!={c}or(i,j)in m):-2 bayt için
Felipe Nardi Batista
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.