3
現実的なマップを生成する
MS Paintで数分で想像上の単語の領域のこの地図を描きました: このようなマップをプログラムで生成できるのは本当にクールだと思います。 チャレンジ 正の整数WとH、および空でない正の整数のセットを取り込むプログラムを作成しますS。 ピクセル幅×ピクセル高の標準トゥルーカラー画像を生成します。WH 各整数ためiにS、その領域の画素にに比例する画像内の平面領域を描画するi任意の近傍領域から色別を使用して、。具体的には、画像内のすべてのピクセルが領域に属するように、領域内のピクセル数をW * H * i / sum(S)切り上げまたは切り捨てる必要があります。 平面領域は、領域内にとどまり、対角線ではなく直交方向にのみ移動することで、領域内の任意のピクセルに他のピクセルから到達できるというプロパティを持つピクセルのセットです。上記の地図には10個の平面領域があります。 平面領域のすべてのピクセルは同じ色である必要があり、隣接する領域の色と異なる必要があります。隣接していない場合、領域は同じ色になる場合があります。 それ以外の場合、領域の形状、配置、または色付けに制限はありません。これは人気コンテストです。目標は、物理的または政治的な想像上の世界の現実的な地図を、あらゆる地理的規模で作成するプログラムを作成することです。 当然、コードだけでなく、最高の出力画像を見せてください。 詳細 ファイル、コマンドライン、標準入力などから入力を取得します。画像を標準形式で保存するか、画面に表示します。 プログラムは、同一の入力に対して決定論的でなければなりません。すなわち、出力画像は常にいくつかの特定のために同じであるべきであるH、WとS。(それSはリストではなくセットであるため、順序は重要ではありません。)そうでない場合は、必要ではありませんが、必要に応じてランダム性を使用できます(ただし、強くお勧めします)。 出力画像の地理は、Wまたはの異なる値に対して「スケーリング」する必要はありませんH(可能ですが)。それは完全に異なる場合があります。 少なくとも32個のランダムな色の可能性がある限り、2つの隣人が同じ色になる可能性は低いため、隣人の色のルールを無視して、色をランダムに割り当てることができます。 領域は画像の境界で停止します。ラップアラウンドはありません。 ピクセルよりも多くの領域がある場合のように、領域にはピクセルが含まれていない可能性があります(したがって、存在しません)。 入力例 有効な送信により、上記のパラメーターを使用して上記のマップが生成された可能性があります。 W = 380 H = 260 S = {233, 420, 1300, 3511, 4772, 5089, 9507, 22107, 25117, 26744} これらのS値は各領域のピクセル数とまったく同じですが、そうである必要はありません。それは覚えているS、それが必ずしも常にソートされていないので、セットです。