Quần đảo cô đơn


10

Đầu vào:

Một mảng 2D chứa hai giá trị riêng biệt (tùy chọn). Tôi sẽ sử dụng 01 khi giải thích các quy tắc. Các định dạng đầu vào là tất nhiên linh hoạt.


Thử thách:

Số không là nước, và những cái là đảo. Để đảm bảo sự cô đơn, nhiệm vụ của bạn là bao quanh tất cả các đảo bằng nước bằng cách chèn các hàng và cột số không. Bạn không muốn lãng phí nước, vì vậy bạn phải giảm thiểu lượng nước được thêm vào. Trong trường hợp có nhiều hơn một giải pháp yêu cầu cùng một lượng nước được thêm vào, thì bạn nên thêm các cột nước, không phải hàng. Tôi sẽ chỉ ra điều này trong các trường hợp thử nghiệm.


Đầu ra:

Mảng 2D mới, được sửa đổi. Các định dạng đầu ra là tất nhiên linh hoạt.


Các trường hợp thử nghiệm:

Đầu vào và đầu ra được phân tách bằng dấu gạch ngang. Các số không được thêm vào được hiển thị bằng phông chữ đậm. Sử dụng một trong những câu trả lời ở đây nếu bạn muốn chuyển đổi các trường hợp thử nghiệm sang các định dạng thuận tiện hơn.

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

Lưu ý rằng chúng tôi đã thêm một cột số không, không phải là một hàng số không. Điều này là do số lượng các số không cần thiết bằng nhau và các cột nên được ưu tiên.


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

Lưu ý rằng chúng tôi đã thêm các hàng, không phải các cột, vì điều đó đòi hỏi số lượng không nhiều nhất.


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

Điều này đòi hỏi cả cột và một hàng.


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

Tốt hơn để thêm hai cột hơn một hàng, vì nó cần ít nước hơn.


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

Tốt hơn để thêm hai hàng hơn một cột, vì nó cần ít nước hơn.



Chết tiệt, Stewie, giờ tôi lại bị "Jack Sparrow" mắc kẹt trong đầu!
Shaggy

Vấn đề này tương đương với bài toán che đỉnh trên đồ thị lưỡng cực, và theo Wikipedia nó có thể được giải quyết trong thời gian đa thức.
dùng202729

Tôi đã thay đổi suy nghĩ của mình ... nó có thể có trọng lượng. Dù sao cho ma trận vuông đủ lớn, nó (hy vọng) tương đương. Vì vậy, nếu thuật toán của bạn "quá đơn giản", hãy cẩn thận .
dùng202729

Tôi nghĩ rằng tôi có một thuật toán thời gian đa thức.
dùng202729

Câu trả lời:


2

Thạch , 37 byte

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

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

Hàm trả về một mảng 2D của số nguyên. Lưu ý rằng tự nhiên trong danh sách Jelly singleton hiển thị dưới dạng giá trị của nó vì vậy Gđược sử dụng để định dạng đầu ra.


  • Liên kết 1: Trả về (hiệu lực).
  • Liên kết 2: Chương trình chính.

Chương trình chạy trong thời gian theo cấp số nhân, nhưng cho đến nay tôi không thể nghĩ ra bất kỳ thuật toán thời gian đa thức nào. Sử dụng Ƥchức năng dyadic, tính năng này hoãn lại thách thức.


2

Python 2 , 374 346 340 339 323 317 byte

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]

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


Tôi nghĩ rằng đầu tiên [:]có thể được gỡ bỏ mà không ảnh hưởng đến đầu ra.
dùng202729

@ user202729, Cảm ơn, tôi nghĩ nó có thể. Tôi đã thay đổi nó trong lúc này :)
TFeld
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.