뉴욕 타임즈에서이 그래픽을 디자인 한 것에 흥미를 느꼈습니다. 뉴욕 타임즈는 각 미국 주가 그리드의 사각형으로 표시됩니다. 나는 그들이 손으로 정사각형을 배치했는지 또는 실제로 인접 상태의 위치를 나타내는 정사각형 (일부 정의에서)의 최적 배치를 찾았는지 궁금했습니다.
코드는 상태 (또는 다른 임의의 2 차원 모양)를 나타 내기 위해 정사각형을 최적으로 배치하는 문제의 작은 부분을 차지할 것입니다. 구체적으로, 우리는 이미 모양의 모든 지리적 중심 또는 중심 을 가지고 있다고 가정합니다 편리한 형식이며, 이와 같은 다이어그램에서 데이터의 최적 표현은 셰이프 중심에서 사각형을 나타내는 중심까지의 거리가 각각 최소 하나의 사각형으로 최소 인 형식입니다. 가능한 위치.
코드는 편리한 형식으로 0.0에서 100.0까지의 부동 소수점 X 및 Y 좌표의 고유 쌍 목록을 가져오고 데이터를 표현하기 위해 최적으로 배치 된 격자에 단위 사각형의 음이 아닌 정수 좌표를 출력합니다 순서를 유지합니다. 여러 정사각형 배열이 최적 인 경우 최적 배열을 출력 할 수 있습니다. 1 ~ 100 쌍의 좌표가 제공됩니다.
이것은 코드 골프, 가장 짧은 코드 승리입니다.
예 :
입력: [(0.0, 0.0), (1.0, 1.0), (0.0, 1.0), (1.0, 0.0)]
이것은 쉬운 일입니다. 그리드에서 사각형의 중심은 0.0, 1.0, 2.0 등입니다. 따라서이 모양은 이미이 패턴에서 사각형의 중심에 완벽하게 배치됩니다.
21
03
따라서 출력은 원하는 형식으로 정확하게 이러한 좌표이지만 정수로 표시되어야합니다.
[(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)에서 정사각형 중심에 가깝지만 두 정사각형이 같은 위치에있을 수 없으므로 밀어야합니다. 도형의 중심에서 사각형의 중심까지의 거리를 최소화하면 다음과 같은 패턴이 나타납니다.
1
402
3
따라서 출력은이어야합니다 [(2, 2), (2, 3), (3, 2), (2, 1), (1, 2)]
.
테스트 사례 :
[(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)]
모양의 중심에서 각 경우를 나타내는 사각형의 중심까지의 총 거리 (오류가 발견되면 알려주십시오!) :
0.0
3.6
4.087011
13.243299
2.724791
1.144123
재미로:
다음은 대략 시간이 사용 된 규모로 입력 형식으로 인접한 미국의 지리적 중심을 나타냅니다.
[(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)]
이를 얻으려면, 나는에 두 번째 목록에서 좌표를했다 이 페이지 및 사용 된 0.4 * (125.0 - longitude)
우리의 X 좌표과 0.4 * (latitude - 25.0)
우리의 Y 좌표를 위해. 다음은 플롯 된 모습입니다.
실제 좌표로 다이어그램을 만들기 위해 위의 좌표를 사용하여 코드의 출력을 입력으로 사용하는 첫 번째 사람은 뒷면에 두드려집니다!
(1, 2)
아니라고 생각(1, 1)
합니다.