明日は5月4日であるため、明日来るすべての悪いジョークに精神的に準備するための小さなスターウォーズテーマの投稿があります。
バックストーリー
銀河上院のセッション中、すべての上院議員はn*n
グリッドに座っています。JarJarインフルエンザの突然の発生(これは永久に続き、感染者がJarJar Binksのように話す)により、上院議員の一部が感染します。
感染した上院議員がいる6*6
グリッドの例を次に示しX
ます[[0,5],[1,4],[2,3],[2,1],[3,3],[3,0],[4,5],[0,5]]
。対応するリストは次のとおりです。
その後、感染は段階的に広がり始めます。2つの上院議員は、グリッド上のエッジ全体を共有する場合(つまり、上、下、右、左)に隣接します。つまり、対角線を除外します。
上院議員が他の2、3、または4人の上院議員に隣接できると結論づけ、感染に関する次の規則を主張できます。
- 感染した上院議員は永遠に感染したままです
- 上院議員は、前のステップで2人以上の感染した上院議員に隣接していた場合、そのステップで感染します。
感染の最初の2つのステップを示す前のグリッドの例を次に示します。
次のステップの後、すべての上院が感染します
あなたのタスク
コードは、リストのような無効な入力や、n*n
区別できない座標を処理する必要はありません。
あなたのコードは入力としていくつかの整数のリスト(またはバイナリグリッドまたはあなたの言語に適した他のフォーマット)と整数n
(リスト以外のフォーマットを使用する場合は不要な場合があります)を取ります:
8 [[1,2],[1,1],[7,4],[2,7],[4,3]]
nはグリッドの側面であり、グリッドはan * nグリッドであり、整数のペアのリストは最初に感染した上院議員のセルの座標です。
グリッドの左下は[0,0]で、右上は[n-1、n-1]です。左上は[0、n-1]です。
コードは整数を出力する必要があります:
-1
または、グリッド全体が完全に感染することはない場合、またはグリッド全体を感染させるのに必要な最小ステップ数である場合は、偽の値またはエラー
テストケース
6 [[0,5],[1,4],[2,3],[2,1],[3,3],[3,0],[4,5],[5,0]] => 7
4 [[1,1][0,3][1,0][3,0][3,3]] => 9
これはcode-golfであるため、バイト単位の最短回答が優先されることに注意してください。
n
?最大値はありますか?
CellularAutomaton
ます