แผนที่ ASCII ตัวละครห้าตัว


9

หมายเหตุ: ในโพสต์นี้คำว่า 'ตัวละคร' และ 'สี' หมายถึงสิ่งเดียวกัน

ภาพนี้:

แผนที่ตัวอย่าง

สามารถแสดงเป็น

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

(สีการจับคู่กับตัวอักษร ascii)

ทฤษฎีบทสี่สีกล่าวว่า "ให้เครื่องบินแยกออกเป็นส่วนที่ต่อเนื่องกันสร้างร่างที่เรียกว่าแผนที่ไม่จำเป็นต้องใช้สีเกินสี่สีในการกำหนดขอบเขตของแผนที่เพื่อไม่ให้มีสองบริเวณที่อยู่ติดกันมีสีเดียวกัน เรียกว่าภูมิภาคที่อยู่ติดกันหากพวกเขาแบ่งปันขอบเขตทั่วไปที่ไม่ได้เป็นมุมที่มุมเป็นจุดที่ใช้ร่วมกันโดยสามหรือมากกว่าภูมิภาค - Wikipedia ( ลิงก์ )

ซึ่งหมายความว่าควรเป็นไปได้ที่จะระบายสีแผนที่โดยใช้สี่สีเพื่อไม่ให้สองส่วนที่แบ่งปันขอบแบ่งปันสี

อัลกอริทึมในการระบายสีแผนที่โดยใช้เพียงสี่สีนั้นมีความซับซ้อนดังนั้นในความท้าทายนี้โปรแกรมของคุณจำเป็นต้องระบายสีแผนที่โดยใช้สีห้าสีหรือน้อยกว่า

แผนที่ก่อนหน้านี้เปลี่ยนสีอาจมีลักษณะเช่นนี้:

ตัวอย่างแผนที่ห้าสี

ซึ่งสามารถแสดงเป็น

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

หรือเทียบเท่า

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

ท้าทาย:

เมื่อได้รับ "แผนที่" ที่ทำจากอักขระ ASCII (โดยที่อักขระแต่ละตัวแทนสีที่แตกต่างกัน) "เปลี่ยนสี" แผนที่ (แสดงถึงแผนที่โดยใช้อักขระ ASCII ที่แตกต่างกัน) เพื่อให้ใช้เพียงห้าสีหรือน้อยกว่าเท่านั้น

ตัวอย่าง:

การป้อนข้อมูล:

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

เอาต์พุตที่เป็นไปได้:

11111111111122222222223333333311
44444111222255555551111111112444
22222224441111444444444411111111
55555555222222255555553355511111
22222211111111111122222222222222

ชี้แจง:

  • แผนที่ที่ป้อนจะใช้อักขระอย่างน้อยหกตัวเสมอ
  • คุณสามารถใช้อักขระต่าง ๆ ห้าตัวในผลลัพธ์
  • คุณสามารถใช้อักขระน้อยกว่าห้าตัวในเอาต์พุต
  • คุณสามารถรับอินพุตในรูปแบบที่เหมาะสม (รวมถึงอาร์เรย์ของอาร์เรย์หรืออาร์เรย์ของสตริง)
  • นี่คือ code-golf ดังนั้นคำตอบที่สั้นที่สุดชนะ

ลิงก์ Sandbox


2
อย่างน้อยในตัวอย่างของคุณฉันเห็นว่า "แผนที่" ไม่ใช่กราฟระนาบจริง ๆ เนื่องจากดูเหมือนว่าภูมิภาคที่ไม่ต่อเนื่องจะต้องมีสีเดียวกัน ซึ่งหมายความว่าคุณสามารถสร้างกราฟที่ต้องการสีตั้งแต่ 6 สีขึ้นไป เราควรปฏิบัติต่อแผนที่121เป็น 3 ภูมิภาคที่แยกจากกันเพื่อหลีกเลี่ยงปัญหานี้แม้ว่าตัวอย่างจะมีความหมายเป็นอย่างอื่นหรือเราควรปฏิบัติกับมันเป็น 2 และสมมติว่าไม่มีแผนที่ใดที่จะให้มากกว่า 5 สี?
MildlyMilquetoast

2
ไม่มีข้อผิดพลาดในตัวอย่างมันเป็นเพียงตัวอย่างที่สามารถทำงานได้ทั้งสองวิธี - ไม่ผิดเพียงคลุมเครือ มันจะช่วยในการระบุว่าภูมิภาคต่าง ๆ ที่มีป้ายกำกับด้วยอักขระเดียวกันนั้นเหมือนกันหรือหลายภูมิภาคในกฎ
MildlyMilquetoast

1
สนุกพอฉันเขียนเรียงความเรื่องการพิสูจน์ทฤษฎีบทสี่สีในตอนนี้ ฉันต้องบอกว่าการพิสูจน์ทฤษฎีบทห้าสีนั้นซับซ้อนน้อยกว่ามาก
MildlyMilquetoast

คำตอบ:


5

Python 2 , 375 361 359 357 355 353 350 347 ไบต์

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

ลองออนไลน์!

รับอินพุตเป็นรายการของสตริงและส่งคืนรายการของรายการ

fใช้การป้อนข้อมูลแผนที่และกำหนดสีgส่งคืนอักขระที่เชื่อมต่อทั้งหมดและชุดของเพื่อนบ้านของพวกเขาไปยังพื้นที่ที่สามารถระบายสีด้วยสีที่แตกต่างกัน



@ovs ขอบคุณ :-)
TFeld


@FelipeNardiBatista ขอบคุณ :)
TFeld

if~-(n!={c}or(i,j)in m):for -2 bytes
Felipe Nardi Batista
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.