MATLAB, 94 93 byte
rng(input(''));x(9,9)=~1;x(randperm(81,10))=1;y=[conv2(+x,ones(3),'s')+48 ''];y(x)=42;disp(y)
Contoh run (baris pertama setelah kode adalah input yang diketik oleh pengguna):
>> 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
Penjelasan
rng(input(''));
mengambil bilangan bulat dan menggunakannya sebagai benih. (Ini berfungsi dalam versi MATLAB modern. Versi lama mungkin memerlukan sintaks yang berbeda.)
x(9,9)=~1;
menugaskan logis 0
, atau false
(diperoleh dengan meniadakan secara logis 1
) ke entri (9,9)
matriks x
. Sisa dari entri secara otomatis diinisialisasi ke logis 0
juga.
x(randperm(81,10))=1;
menugaskan 1
(secara otomatis dilemparkan ke logis 1
, atau true
) untuk 10
dari
81
entri x
, dipilih secara acak tanpa penggantian. Entri-entri ini adalah yang mengandung bom.
conv2(+x,ones(3),'s')
adalah singkatan dari conv2(+x,ones(3),'same')
. Ini menggabungkan matriks x
(yang perlu dilemparkan ke double
, menggunakan +
) dengan lingkungan 3 × 3 yang berisi 1
. Ini menghitung berapa banyak bom yang berdekatan dengan setiap entri. Untuk entri yang berisi bom itu termasuk bom itu, tetapi nilainya di sana akan ditimpa nanti.
y=[...+48 ''];
menambahkan 48 ke nilai, untuk mengkonversi dari angka ke kode ASCII. Menggabungkan dengan matriks kosong melemparkan kode ASCII ini ke karakter.
y(x)=42;
menugaskan 42 (kode ASCII untuk '*'
) ke posisi bom. Posisi-posisi ini diberikan oleh x
, yang di sini digunakan sebagai indeks logis.
disp(y)
menampilkan hasilnya.