เกาะโดดเดี่ยว


10

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

อาร์เรย์ 2 มิติที่มีค่าแตกต่างกันสองค่า ฉันจะใช้0และ1เมื่ออธิบายกฎ รูปแบบการป้อนข้อมูลมีความยืดหยุ่นแน่นอน


ท้าทาย:

เลขศูนย์คือน้ำและอีกอันคือเกาะ เพื่อให้มั่นใจในความเหงางานของคุณคือล้อมรอบเกาะด้วยน้ำโดยการแทรกแถวและคอลัมน์ของศูนย์ คุณไม่ต้องการเสียน้ำดังนั้นคุณต้องลดปริมาณน้ำที่เติมเข้าไป ในกรณีที่มีวิธีการแก้ปัญหามากกว่าหนึ่งวิธีที่ต้องใช้น้ำในปริมาณเดียวกันคุณควรเพิ่มคอลัมน์ของน้ำไม่ใช่แถว ฉันจะแสดงสิ่งนี้ในกรณีทดสอบ


เอาท์พุท:

อาร์เรย์ 2D ใหม่ที่ได้รับการแก้ไข รูปแบบผลลัพธ์มีความยืดหยุ่นแน่นอน


กรณีทดสอบ:

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

1
---
1

1 1
---
1 0 1

1 1
1 1
---
1 0 1
0 0 0
1 0 1

1 0
0 1
---
1 0 0
0 0 1

โปรดทราบว่าเราได้เพิ่มคอลัมน์เป็นศูนย์ไม่ใช่แถวของศูนย์ นี่เป็นเพราะจำนวนศูนย์ที่จำเป็นเท่ากันและควรมีคอลัมน์ที่ต้องการ


1 0 0 0 1
0 1 0 1 0
0 0 1 0 0
0 1 0 1 0
---
1 0 0 0 1
0 0 0 0 0
0 1 0 1 0
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 1 0 1 0

โปรดทราบว่าเราได้เพิ่มแถวไม่ใช่คอลัมน์เนื่องจากต้องมีจำนวนศูนย์น้อยที่สุด


0 0 1 0 0
0 1 1 1 0
---
0 0 0 1 0 0 0
0 0 0 0 0 0 0
0 1 0 1 0 1 0

สิ่งนี้ต้องการทั้งคอลัมน์และแถว


0 0 1 0 0
0 1 0 1 0
---
0 0 0 1 0 0 0
0 1 0 0 0 1 0

ดีกว่าที่จะเพิ่มสองคอลัมน์มากกว่าหนึ่งแถวเพราะมันต้องใช้น้ำน้อย


0 0
1 0
0 1
1 0
0 0
---
0 0 
1 0
0 0 
0 1 
0 0 
1 0
0 0

ดีกว่าที่จะเพิ่มสองแถวกว่าหนึ่งคอลัมน์เพราะมันต้องใช้น้ำน้อย


ที่เกี่ยวข้อง
Stewie Griffin

Damnit, Stewie ตอนนี้ฉันมี "Jack Sparrow" ติดอยู่ในหัวของฉันอีกครั้ง!
ปุย

ปัญหานี้เทียบเท่ากับปัญหาการครอบคลุมจุดสุดยอดในกราฟสองฝ่ายและตามที่Wikipediaสามารถแก้ไขได้ในเวลาพหุนาม
user202729

ฉันเปลี่ยนใจ ... มันอาจจะมีน้ำหนัก อย่างไรก็ตามสำหรับเมทริกซ์สี่เหลี่ยมจัตุรัสที่มีขนาดใหญ่พอมันหวังว่าจะเทียบเท่ากัน ดังนั้นหากขั้นตอนวิธีการของคุณคือ "ง่ายเกินไป" ต้องระวัง
user202729

ฉันคิดว่าฉันมีอัลกอริทึมเวลาพหุนาม
user202729

คำตอบ:


2

เยลลี่ , 37 ไบต์

ṫƤ-S€ZƊ⁺FỊẠ
Z_,,WƲ€ŒpẎ€Ʋ⁺€ẎLÞFL$ÞṚÇÞṪ

ลองออนไลน์!

ฟังก์ชันส่งคืนอาร์เรย์จำนวนเต็ม 2 มิติ โปรดทราบว่าตามปกติในรายการ Jelly singleton จะแสดงเป็นค่าเพื่อGใช้ในการจัดรูปแบบเอาต์พุต


  • ลิงก์ 1: ผลตอบแทน (ความถูกต้อง)
  • ลิงค์ 2: โปรแกรมหลัก

โปรแกรมทำงานในเวลาแบบเอ็กซ์โพเนนเชียล แต่จนถึงตอนนี้ฉันไม่สามารถนึกถึงอัลกอริธึมเวลาแบบพหุนาม ใช้Ƥฟังก์ชั่น dyadic ซึ่งเป็นคุณสมบัติที่ท้าทาย


2

Python 2 , 374 346 340 339 323 317 ไบต์

R=range;L=len
def f(a):
 w,h=L(a[0]),L(a);W=[]
 for i in R(2**w):
	A=zip(*a)
	for c in R(w):A[-c:-c]=[[0]*h]*(i&1<<c>0)
	for j in R(2**h):
	 B=zip(*A);x=L(B[0])
	 for r in R(h):B[-r:-r]=[(0,)*x]*(j&1<<r>0)
	 y=L(B);W+=[(w*h-x*y,x,B)]*all(sum(B[i][j:j+2]+B[i+1][j:j+2])<2for i in R(y-1)for j in R(x))
 return max(W)[2]

ลองออนไลน์!


ฉันคิดว่าอันแรก[:]สามารถลบออกได้โดยไม่ส่งผลกระทบต่อผลลัพธ์
user202729

@ user202729 ขอบคุณฉันคิดว่ามันสามารถ ฉันจะเปลี่ยนมันในระหว่างนี้ :) :)
TFeld
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.