Tôi bị thu hút bởi thiết kế của đồ họa này từ Thời báo New York, trong đó mỗi tiểu bang Hoa Kỳ được đại diện bởi một hình vuông trong một lưới. Tôi tự hỏi liệu họ đặt các hình vuông bằng tay hay thực sự tìm thấy một vị trí tối ưu của hình vuông (theo một số định nghĩa) để đại diện cho vị trí của các trạng thái tiếp giáp.
Mã của bạn sẽ đảm nhận một phần nhỏ trong thử thách đặt tối ưu các hình vuông để thể hiện các trạng thái (hoặc các hình dạng hai chiều tùy ý khác.) Cụ thể, chúng tôi sẽ giả định rằng chúng tôi đã có tất cả các trung tâm địa lý hoặc tâm của hình dạng trong một định dạng thuận tiện và biểu diễn tối ưu của dữ liệu trong sơ đồ như thế này là một khoảng cách trong đó tổng khoảng cách từ tâm của các hình đến tâm của các hình vuông đại diện cho chúng là tối thiểu, với tối đa một ô vuông trong mỗi sơ đồ vị trí có thể.
Mã của bạn sẽ lấy danh sách các cặp tọa độ X và Y dấu phẩy động duy nhất từ 0,0 đến 100,0 (bao gồm) ở bất kỳ định dạng thuận tiện nào và sẽ xuất ra tọa độ số nguyên không âm của các ô vuông đơn vị trong lưới được đặt tối ưu để biểu thị dữ liệu , giữ gìn trật tự. Trong trường hợp nhiều cách sắp xếp hình vuông là tối ưu, bạn có thể xuất ra bất kỳ sự sắp xếp tối ưu nào. Từ 1 đến 100 cặp tọa độ sẽ được đưa ra.
Đây là mã golf, mã ngắn nhất thắng.
Ví dụ:
Đầu vào: [(0.0, 0.0), (1.0, 1.0), (0.0, 1.0), (1.0, 0.0)]
Đây là một điều dễ dàng. Các tâm của hình vuông trong lưới của chúng tôi nằm ở 0,0, 1,0, 2.0, v.v., vì vậy những hình này đã được đặt hoàn hảo ở trung tâm của hình vuông trong mẫu này:
21
03
Vì vậy, đầu ra của bạn phải chính xác là các tọa độ này, nhưng là số nguyên, theo định dạng bạn chọn:
[(0, 0), (1, 1), (0, 1), (1, 0)]
Đầu vào: [(2.0, 2.1), (2.0, 2.2), (2.1, 2.0), (2.0, 1.9), (1.9, 2.0)]
Trong trường hợp này, tất cả các hình dạng đều nằm gần tâm của hình vuông tại (2, 2), nhưng chúng ta cần đẩy chúng ra xa vì hai hình vuông không thể ở cùng một vị trí. Giảm thiểu khoảng cách từ tâm của hình đến tâm hình vuông thể hiện nó cho chúng ta mẫu này:
1
402
3
Vì vậy, đầu ra của bạn nên được [(2, 2), (2, 3), (3, 2), (2, 1), (1, 2)]
.
Các trường hợp thử nghiệm:
[(0.0, 0.0), (1.0, 1.0), (0.0, 1.0), (1.0, 0.0)] -> [(0, 0), (1, 1), (0, 1), (1, 0)]
[(2.0, 2.1), (2.0, 2.2), (2.1, 2.0), (2.0, 1.9), (1.9, 2.0)] -> [(2, 2), (2, 3), (3, 2), (2, 1), (1, 2)]
[(94.838, 63.634), (97.533, 1.047), (71.954, 18.17), (74.493, 30.886), (19.453, 20.396), (54.752, 56.791), (79.753, 68.383), (15.794, 25.801), (81.689, 95.885), (27.528, 71.253)] -> [(95, 64), (98, 1), (72, 18), (74, 31), (19, 20), (55, 57), (80, 68), (16, 26), (82, 96), (28, 71)]
[(0.0, 0.0), (0.1, 0.0), (0.2, 0.0), (0.0, 0.1), (0.1, 0.1), (0.2, 0.1), (0.0, 0.2), (0.1, 0.2), (0.2, 0.2)] -> [(0, 0), (1, 0), (2, 0), (0, 1), (1, 1), (2, 1), (0, 2), (1, 2), (2, 2)]
[(1.0, 0.0), (1.0, 0.1), (1.0, 0.2), (1.0, 0.3)] -> [(1, 0), (0, 0), (2, 0), (1, 1)] or [(1, 0), (2, 0), (0, 0), (1, 1)]
[(3.75, 3.75), (4.25, 4.25)] -> [(3, 4), (4, 4)] or [(4, 3), (4, 4)] or [(4, 4), (4, 5)] or [(4, 4), (5, 4)]
Tổng khoảng cách từ tâm của hình đến tâm của các hình vuông đại diện cho chúng trong từng trường hợp (vui lòng cho tôi biết nếu bạn phát hiện bất kỳ lỗi nào!):
0.0
3.6
4.087011
13.243299
2.724791
1.144123
Chỉ để cho vui:
Đây là một đại diện của các trung tâm địa lý của Hoa Kỳ liền kề ở định dạng đầu vào của chúng tôi, với quy mô gần bằng thời gian mà Times sử dụng:
[(15.2284, 3.1114), (5.3367, 3.7096), (13.0228, 3.9575), (2.2198, 4.8797), (7.7802, 5.5992), (20.9091, 6.6488), (19.798, 5.5958), (19.1941, 5.564), (17.023, 1.4513), (16.6233, 3.0576), (4.1566, 7.7415), (14.3214, 6.0164), (15.4873, 5.9575), (12.6016, 6.8301), (10.648, 5.398), (15.8792, 5.0144), (13.2019, 2.4276), (22.3025, 8.1481), (19.2836, 5.622), (21.2767, 6.9038), (15.8354, 7.7384), (12.2782, 8.5124), (14.1328, 3.094), (13.0172, 5.3427), (6.142, 8.8211), (10.0813, 6.6157), (3.3493, 5.7322), (21.3673, 7.4722), (20.1307, 6.0763), (7.5549, 3.7626), (19.7895, 7.1817), (18.2458, 4.2232), (9.813, 8.98), (16.8825, 6.1145), (11.0023, 4.2364), (1.7753, 7.5734), (18.8806, 6.3514), (21.3775, 6.6705), (17.6417, 3.5668), (9.9087, 7.7778), (15.4598, 4.3442), (10.2685, 2.5916), (5.3326, 5.7223), (20.9335, 7.6275), (18.4588, 5.0092), (1.8198, 8.9529), (17.7508, 5.4564), (14.0024, 7.8497), (6.9789, 7.1984)]
Để có được những điều này, tôi lấy tọa độ từ danh sách thứ hai trên trang này và sử dụng 0.4 * (125.0 - longitude)
cho tọa độ X của chúng tôi và 0.4 * (latitude - 25.0)
cho tọa độ Y của chúng tôi. Đây là những gì trông giống như âm mưu:
Người đầu tiên sử dụng đầu ra từ mã của họ với tọa độ trên làm đầu vào để tạo một sơ đồ với các ô vuông thực tế được vỗ nhẹ vào mặt sau!
(1, 2)
, không(1, 1)
.