Đây là lần thứ hai trong hai thử thách về "kéo chức năng". Đây là phần I đơn giản hơn một chút .
Hãy lái m đinh vào một bảng ở các vị trí (x 1 , y 1 ) đến (x m , y m ) . Buộc một dải cao su vào đầu tiên và cuối cùng của những cái đó và kéo dài xung quanh các móng khác, sao cho dải băng đi qua tất cả các móng theo thứ tự. Lưu ý rằng dải cao su hiện mô tả chức năng tham số tuyến tính từng phần (x (t), y (t)) trong không gian 2D.
Bây giờ lái xe n đinh khác vào bảng, tại các vị trí (x 1 , y 1 ) đến (x n , y n ) . Nếu bây giờ chúng ta loại bỏ tất cả các móng m ban đầu trừ cái đầu tiên và cái cuối cùng (mà hai đầu của cao su được buộc vào), dây cao su sẽ rút ngắn cho đến khi nó nằm căng xung quanh móng mới, mang lại một chức năng tuyến tính khác.
Ví dụ: lấy m = 12 móng ban đầu tại các vị trí (0, 0), (2, -1), (3/2, 4/3), (7/2, 1/3), (11/2, 16/3), (1, 16/3), (0, 1), (7, -2), (3, 4), (8, 1), (3, -1), (11, 0) và n = 10 móng nữa tại các vị trí (1, 1), (3, 1), (4, 4), (1, 3), (2, 2), (5, -1), (5, 0 ), (6, 2), (7, 1), (6, 0) . Ba lô sau đây cho thấy quá trình được mô tả ở trên:
Đối với phiên bản lớn hơn: Nhấp chuột phải -> Mở trong tab mới
Và đây là hình ảnh động của dây cao su thắt chặt nếu bạn gặp khó khăn khi hình dung nó:
Các thách thức
Đưa ra hai danh sách "đinh", vẽ dây cao su taut xung quanh danh sách thứ hai nếu nó bắt đầu từ hình dạng đi qua tất cả các móng trong danh sách đầu tiên.
Bạn có thể viết chương trình hoặc hàm và nhận đầu vào thông qua STDIN, ARGV hoặc đối số hàm. Bạn có thể hiển thị kết quả trên màn hình hoặc lưu hình ảnh vào một tệp.
Nếu kết quả được rasterized, nó cần tối thiểu 300 pixel cho mỗi bên. Dải cao su và đinh cuối cùng phải bao phủ ít nhất 75% phạm vi ngang và dọc của hình ảnh. Thang đo chiều dài của x và y phải giống nhau. Bạn cần hiển thị móng trong bộ thứ hai (sử dụng ít nhất 3x3 pixel) và chuỗi (rộng ít nhất 1 pixel). Bạn có thể hoặc không bao gồm các trục.
Màu sắc là lựa chọn của bạn, nhưng bạn cần ít nhất hai màu có thể phân biệt: một cho nền và một cho móng và chuỗi (những màu này có thể có màu khác nhau).
Bạn có thể cho rằng tất cả các đinh trong danh sách thứ hai đều cách xa hình dạng ban đầu của dây cao su ít nhất 10 -5 đơn vị (do đó bạn không cần phải lo lắng về sự thiếu chính xác của dấu phẩy động).
Đây là mã golf, vì vậy câu trả lời ngắn nhất (tính bằng byte) sẽ thắng.
Thêm ví dụ
Dưới đây là hai ví dụ khác:
{{1, 1}, {3, 3}, {2, 4}, {1, 3}, {4, 0}, {3, -1}, {2, 0}, {4, 2}}
{{2, 1}, {3, 2}, {1, 2}, {4, 1}}
{{1, 1}, {3, 1}, {3, 3}, {1, 3}, {1, 5}, {3, 5}, {-1, 3}, {-1, 0}, {3, 4}, {5, 1}, {5, -1}, {7, -1}, {3, 7}, {7, 5}}
{{0, 0}, {0, 2}, {0, 4}, {0, 6}, {2, 0}, {2, 2}, {2, 4}, {2, 6}, {4, 0}, {4, 2}, {4, 4}, {4, 6}, {6, 0}, {6, 2}, {6, 4}, {6, 6}}
Và đây là một ví dụ cho thấy tầm quan trọng của hai trong số những chiếc đinh ban đầu còn lại. Kết quả sẽ được b và không một :
{{0, 0}, {0, 1}, {-1, 1}, {-1, -1}, {1, -1}, {1, 0}}
{{-0.5, 0.5}}
Cảm ơn Ell đã cung cấp ví dụ này.