四角いペグを四角い穴に入れる
ニューヨークタイムズのこのグラフィックのデザインには興味をそそられました。アメリカの各州は格子状の正方形で表されています。正方形を手動で配置したのか、実際には隣接する状態の位置を表すために(ある定義の下で)正方形の最適な配置を見つけたのか疑問に思いました。 コードは、状態(または他の任意の2次元形状)を表すために正方形を最適に配置するという課題の小さな部分を担います。具体的には、形状のすべての地理的中心または重心がすでにあると仮定します。便利な形式であり、このようなダイアグラムでのデータの最適な表現は、形状の重心からそれらを表す正方形の中心までの合計距離が最小であり、それぞれに最大で1つの正方形があること可能な位置。 コードは、任意の便利な形式で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)の正方形の中心に近くなりますが、2つの正方形を同じ位置に配置することはできないため、押し出す必要があります。図形の重心からそれを表す正方形の中心までの距離を最小化すると、次のパターンが得られます。 1 402 3 したがって、出力はになります[(2, 2), (2, 3), (3, 2), (2, 1), (1, …