Bắt những con cừu đó!


16

Bạn là nông dân và đàn cừu của bạn đã trốn thoát! Ôi không!

Làm tròn những con cừu bằng cách xây dựng hàng rào để chứa chúng. Là một nông dân với ngân sách bạn muốn sử dụng ít hàng rào nhất có thể. May mắn thay cho bạn, mặc dù chúng không phải là con cừu thông minh nhất thế giới và không buồn di chuyển sau khi trốn thoát.

Bài tập

Đưa ra một danh sách các tọa độ, xuất ra số lượng ít nhất các phân đoạn hàng rào cần thiết để chứa cừu.

Quy tắc

  • Cừu được chứa nếu chúng không thể đi lang thang (không có lỗ trên hàng rào).
  • Bạn không phải chứa tất cả cừu trong một khối hàng rào - có thể có nhiều khu vực có hàng rào độc lập với nhau.
  • Các phân đoạn hàng rào được định hướng theo hướng hồng y.
  • Mỗi tuple phối hợp đại diện cho một con cừu.
  • Đầu vào phải là các cặp số nguyên dương, x>0& y>0, nhưng có thể được định dạng phù hợp cho ngôn ngữ của bạn.
    • tức là: {{1,1},{2,1},{3,7}, .. }hoặc[1,2],[2,1],[3,7], ..
  • Khoảng trống trong khu vực có rào chắn là được.
  • Bạn không thể giả sử tọa độ là đầu vào theo thứ tự cụ thể.

Ví dụ, một con cừu duy nhất yêu cầu 4các phân đoạn hàng rào phải được chứa đầy đủ.

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

[1,1]
4

[1,1],[1,2],[2,2]
8

[2,1],[3,1],[2,3],[1,1],[1,3],[3,2],[1,2],[3,3]
12

[1,1],[1,2],[2,2],[3,7],[4,9],[4,10],[4,11],[5,10]
22

[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9]
36

[1,1],[2,2],[3,3],[4,4],[6,6],[7,7],[8,8],[9,9]
32

[2,1],[8,3],[8,4]
10

Ghi chú

  • Bạn có thể giả sử tọa độ đầu vào là hợp lệ.
  • Về mặt lý thuyết, thuật toán của bạn sẽ hoạt động cho bất kỳ tọa độ nguyên lớn nào hợp lý (tối đa giá trị được hỗ trợ tối đa của ngôn ngữ của bạn).
  • Hoặc chương trình đầy đủ hoặc chức năng trả lời là được.

Đây là , vì vậy câu trả lời ngắn nhất trong byte thắng!


Đầu vào có thể là danh sách tọa độ x, theo sau là danh sách tọa độ y không? ví dụ{1,2,3,4},{5,6,7,8} -> {1,5},{2,6},{3,7},{4,8}
Pavel

@Phoenix Không, mỗi x,yđầu vào phải được cùng nhau. Mặc dù nghĩ tốt, tôi đã không nghĩ về điều đó bản thân mình.
CzarMatt

Các giới hạn trên tọa độ là gì? Là 0 và tiêu cực có thể?
AGourd

3
Điều này là khó khăn đáng ngạc nhiên. Mỗi khi tôi nghĩ rằng tôi có một heuristic xử lý tất cả các trường hợp, có một cái gì đó tôi đã bỏ lỡ.
xnor

1
Wow, thật là một thử thách. Tôi thừa nhận sự mất mát của tôi; vít làm điều này trong 05AB1E.
Bạch tuộc ma thuật Urn

Câu trả lời:


5

JavaScript (ES6), 251 244 275 byte

a=>Math.min(...(P=(a,r=[[a]],c=a[0])=>(a[1]&&P(a.slice(1)).map(l=>(r.push([[c],...l]),l.map((_,i)=>r.push([[c,...l[i]],...((b=[...l]).splice(i,1),b)])))),r))(a).map(L=>L.reduce((p,l)=>l.map(([h,v])=>(x=h<x?h:x,X=h<X?X:h,y=v<y?v:y,Y=v<Y?Y:v),x=y=1/0,X=Y=0)&&p+X-x+Y-y+2,0)))*2

Làm sao?

Chúng tôi sử dụng hàm đệ quy P () để tạo danh sách tất cả các phân vùng có thể có của danh sách đầu vào. Hàm này hiện không tối ưu, trong đó nó trả về một số phân vùng trùng lặp - tuy nhiên không làm thay đổi kết quả cuối cùng.

Đối với mỗi phân vùng, chúng tôi tính toán số lượng hàng rào cần thiết để bao quanh tất cả cừu trong mỗi nhóm bằng một hình chữ nhật. Tổng của các hàng rào cho điểm số của phân vùng. Cuối cùng chúng tôi trả lại điểm thấp nhất.

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


Về bước 2, tại sao không [ [1,1],[2,2] ] , [ [1,2] ]?
edc65

@ edc65 Hy vọng nó sẽ được sửa chữa.
Arnauld

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.