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)
結果を表示します。