MATLAB、94 93バイト
rng(input(''));x(9,9)=~1;x(randperm(81,10))=1;y=[conv2(+x,ones(3),'s')+48 ''];y(x)=42;disp(y)
実行例(コードの後の最初の行はユーザーが入力した入力です):
>> rng(input(''));x(9,9)=~1;x(randperm(81,10))=1;y=[conv2(+x,ones(3),'s')+48 ''];y(x)=42;disp(y)
99
*10001*2*
220001232
*201111*1
*312*1111
12*211000
011211000
0001*1000
000112110
000001*10
説明
rng(input(''));
整数を受け取り、それをシードとして使用します。(これは、最新のMATLABバージョンで機能します。古いバージョンでは、異なる構文が必要になる場合があります。)
x(9,9)=~1;
論理式0、またはfalse(論理的に否定することで得られる1)を(9,9)行列のエントリに割り当てxます。残りのエントリも自動的に論理的に初期化され0ます。
x(randperm(81,10))=1;
割り当ては、1(autoomatically論理的にキャスト1、またはtrueに対して)10の
81のエントリをx置換せずにランダムに選択され、。これらのエントリは、爆弾を含むものです。
conv2(+x,ones(3),'s')
はの略語ですconv2(+x,ones(3),'same')。を含む3×3近傍で行列x(をdouble使用してキャストする必要があります)を畳み込みます。これは、各エントリに隣接する爆弾の数をカウントします。爆弾を含むエントリの場合、その爆弾が含まれますが、その値は後で上書きされます。+1
y=[...+48 ''];
値に48を追加して、数値からASCIIコードに変換します。空のマトリックスと連結すると、これらのASCIIコードがcharsにキャストされます。
y(x)=42;
'*'爆弾の位置に42(ASCIIコード)を割り当てます。これらの位置はによって与えられx、ここでは論理インデックスとして使用されます。
disp(y)
結果を表示します。