Saya tertarik dengan desain grafik ini dari New York Times, di mana setiap negara bagian AS diwakili oleh sebuah kotak di kotak. Saya bertanya-tanya apakah mereka menempatkan kotak dengan tangan atau benar-benar menemukan penempatan kotak yang optimal (berdasarkan beberapa definisi) untuk mewakili posisi negara bagian yang berdekatan.
Kode Anda akan mengambil sebagian kecil dari tantangan penempatan kuadrat secara optimal untuk mewakili negara (atau bentuk dua dimensi sewenang-wenang lainnya.) Secara khusus, ini akan mengasumsikan bahwa kami telah memiliki semua pusat geografis atau centroid dari bentuk di format yang nyaman, dan bahwa representasi optimal dari data dalam diagram seperti ini adalah yang di mana total jarak dari centroid bentuk ke pusat kotak yang mewakili mereka minimal, dengan paling banyak satu kotak di setiap posisi yang mungkin.
Kode Anda akan mengambil daftar pasangan unik titik koordinat X dan Y mulai 0,0 hingga 100,0 (inklusif) dalam format apa pun yang nyaman, dan akan menampilkan koordinat bilangan bulat non-negatif dari kuadrat unit dalam kisi yang ditempatkan secara optimal untuk mewakili data , menjaga ketertiban. Dalam kasus di mana beberapa pengaturan kuadrat optimal, Anda dapat menampilkan salah satu pengaturan optimal. Antara 1 dan 100 pasang koordinat akan diberikan.
Ini golf kode, kode terpendek menang.
Contoh:
Memasukkan: [(0.0, 0.0), (1.0, 1.0), (0.0, 1.0), (1.0, 0.0)]
Ini mudah. Pusat-pusat kotak di kotak kami berada di 0,0, 1.0, 2.0, dll. Jadi bentuk-bentuk ini sudah ditempatkan dengan sempurna di pusat-pusat kotak dalam pola ini:
21
03
Jadi output Anda harus persis koordinat ini, tetapi sebagai bilangan bulat, dalam format pilihan Anda:
[(0, 0), (1, 1), (0, 1), (1, 0)]
Memasukkan: [(2.0, 2.1), (2.0, 2.2), (2.1, 2.0), (2.0, 1.9), (1.9, 2.0)]
Dalam hal ini semua bentuk berada dekat dengan pusat kotak di (2, 2), tetapi kita perlu mendorongnya menjauh karena dua kotak tidak dapat berada di posisi yang sama. Meminimalkan jarak dari centroid bentuk ke pusat kotak yang melambangkannya memberi kita pola ini:
1
402
3
Jadi output Anda seharusnya [(2, 2), (2, 3), (3, 2), (2, 1), (1, 2)].
Kasus uji:
[(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)]
Total jarak dari centroid bentuk ke pusat kotak yang mewakili mereka dalam setiap kasus (beri tahu kami jika Anda menemukan kesalahan!):
0.0
3.6
4.087011
13.243299
2.724791
1.144123
Hanya untuk bersenang-senang:
Berikut adalah representasi dari pusat-pusat geografis Amerika Serikat yang berdekatan dalam format input kami, dengan skala kira-kira yang digunakan Times:
[(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)]
Untuk mendapatkan ini, saya mengambil koordinat dari daftar kedua di halaman ini dan digunakan 0.4 * (125.0 - longitude)untuk koordinat X kami dan 0.4 * (latitude - 25.0)untuk koordinat Y kami. Inilah yang terlihat seperti diplot:
Orang pertama yang menggunakan output dari kode mereka dengan koordinat di atas sebagai input untuk membuat diagram dengan kotak aktual mendapat tepukan di belakang!





(1, 2), bukan(1, 1).