Bản đồ năm ký tự ASCII


9

Lưu ý: Trong bài đăng này, các thuật ngữ 'ký tự' và 'màu sắc' có nghĩa cơ bản giống nhau

Bức ảnh này:

bản đồ ví dụ

có thể được đại diện như

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

(ánh xạ màu tới các ký tự ascii)

Định lý bốn màu nói rằng "cho bất kỳ sự phân tách mặt phẳng nào thành các vùng tiếp giáp nhau, tạo ra một hình gọi là bản đồ, không quá bốn màu được yêu cầu để tô màu các vùng của bản đồ sao cho không có hai vùng liền kề có cùng màu. các vùng được gọi là liền kề nếu chúng có chung một ranh giới không phải là một góc, trong đó các góc là các điểm được chia sẻ bởi ba hoặc nhiều vùng. " - Wikipedia ( liên kết )

Điều này có nghĩa là có thể tô màu bản đồ bằng bốn màu sao cho không có hai phần có chung một cạnh chia sẻ một màu.

Thuật toán tô màu bản đồ chỉ sử dụng bốn màu rất phức tạp, vì vậy trong thử thách này, chương trình của bạn chỉ cần tô màu bản đồ bằng năm màu hoặc ít hơn.

Bản đồ trước được tô màu lại có thể trông như thế này:

ví dụ bản đồ năm màu

mà có thể được đại diện như

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

hoặc tương đương

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

Thử thách:

Đưa ra một "bản đồ" được làm bằng các ký tự ascii (trong đó mỗi ký tự đại diện cho một màu khác nhau), "tô màu lại" bản đồ (thể hiện bản đồ bằng các ký tự ascii khác nhau) để nó chỉ sử dụng năm màu hoặc ít hơn.

Thí dụ:

Đầu vào:

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

Sản lượng có thể:

11111111111122222222223333333311
44444111222255555551111111112444
22222224441111444444444411111111
55555555222222255555553355511111
22222211111111111122222222222222

Làm rõ:

  • Bản đồ đầu vào sẽ luôn sử dụng sáu ký tự trở lên
  • Bạn có thể sử dụng bất kỳ năm ký tự khác nhau trong đầu ra
  • Bạn có thể sử dụng ít hơn năm ký tự khác nhau trong đầu ra
  • Bạn có thể lấy đầu vào ở bất kỳ định dạng hợp lý nào (bao gồm một mảng các mảng hoặc một chuỗi các chuỗi)
  • Đây là môn đánh gôn nên câu trả lời ngắn nhất sẽ thắng.

Liên kết hộp cát


2
Tôi thấy, ít nhất là trong ví dụ của bạn, rằng "bản đồ" không thực sự là đồ thị phẳng, do các vùng không liền kề dường như phải có cùng màu. Điều này có nghĩa là bạn có thể dễ dàng tạo một biểu đồ cần 6 màu trở lên để tô màu. Chúng ta có nên coi bản đồ 121là 3 vùng riêng biệt để tránh vấn đề này, mặc dù ví dụ này có nghĩa khác hay chúng ta nên coi nó là 2 và cho rằng sẽ không có bản đồ nào cần nhiều hơn 5 màu?
MildlyMilquetoast

2
Không có lỗi trong ví dụ, chỉ là ví dụ có thể hoạt động theo cách nào đó - không sai, chỉ là mơ hồ. Nó sẽ giúp xác định xem các khu vực khác nhau được gắn nhãn có cùng ký tự là cùng hoặc nhiều khu vực trong quy tắc.
MildlyMilquetoast

1
Thật thú vị, tôi đang viết một bài luận về bằng chứng của định lý bốn màu ngay bây giờ. Tôi phải nói rằng, bằng chứng cho định lý năm màu ít phức tạp hơn nhiều
MildlyMilquetoast

Câu trả lời:


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

Hãy thử trực tuyến!

Lấy đầu vào dưới dạng danh sách các chuỗi và trả về danh sách các danh sách

flấy đầu vào bản đồ và tô màu nó, gtrả về tất cả các ký tự được kết nối và tập hợp các lân cận của chúng, vào khu vực có thể được tô màu bằng một màu riêng biệt.



@ovs Cảm ơn :-)
TFeld


@FelipeNardiBatista Cảm ơn :)
TFeld

if~-(n!={c}or(i,j)in m):cho -2 byte
Felipe Nardi Batista
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.