マインスイーパは人気のあるコンピューターゲームで、おそらくプレイに時間を浪費しているので、各非地雷セルがいくつの隣接地雷を持っているかのヒントに基づいて、長方形のグリッド内の地雷であるセルを明らかにしようとします。また、まだプレイしていない場合は、ここで行います。
マインスイーパグリッド(ボード)についての気の利いた数学的な事実は、次のとおりです。
ボードとその補数の鉱山総数は同じです。(証明)
つまり、マインスイーパグリッドが完全に表示されている場合、そのグリッド上のすべての数値の合計、つまり鉱山の合計は、グリッドの補数の鉱山の合計、つまりすべての鉱山が置き換えられたグリッドに等しくなります非地雷とすべての非地雷が地雷に置き換えられました。
たとえば、マインスイーパグリッドの場合
**1..
34321
*2**1
鉱山の合計は1 + 3 + 4 + 3 + 2 + 1 + 2 + 1 = 17です。
グリッドの補数は
24***
*****
3*44*
合計で2 + 4 + 3 + 4 + 4 = 17になります。
任意のマインスイーパグリッドをテキスト形式で取り込むプログラムを作成します。ここで*
は、地雷を表し、地雷は非地雷セルに隣接する地雷の数1
を8
表します。.
または0
または
(スペース)を使用して、私の隣人のいないセルを選択できます。入力グリッドに正しくマークが付けられていると想定できます。つまり、各非地雷セルは、それに隣接する地雷の合計数を、直交または斜めに正確に示します。
あなたのプログラムが同じ形式でグリッドの補数を印刷する必要があります(これを用いた.
、0
または
あなたが入力に期待されるような)。
バイト単位の最短コードが優先されます。
- プログラムの代わりに、入力グリッドを文字列として受け取り、補数グリッドを出力または返す関数を作成できます。
- 入力または出力の末尾の改行は問題ありませんが、グリッドを形成する文字以外の文字は他にないはずです。
- 1×1グリッドが最小の入力であると想定できます。
テストケース
補数の補数が元のグリッドであるため、すべての入力と出力を交換できます。グリッドは、さらにテストケースのために回転させることもできます。
入力:
111
1*1
111
出力:
***
*8*
***
入力:
.
出力:
*
入力:
*11*1.1**1...1***1.....1*****1..........
出力:
1**2***11*****1.1*******1...1***********
入力:(ノットをカットする例)
**212*32
333*33**
1*22*333
222222*1
*33*2232
2**22*2*
出力:
24***4**
***7**64
*8**7***
******8*
4**7****
*33**5*3
?
ボードの最終行の後の行で終了区切り文字(たとえば)を使用できますか、またはコマンドラインで入力行の数を取得できますか?