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)
Chạy ví dụ (dòng đầu tiên sau mã là đầu vào được nhập bởi người dùng):
>> 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
Giải trình
rng(input(''));
lấy một số nguyên và sử dụng nó như là hạt giống. (Điều này hoạt động trong các phiên bản MATLAB hiện đại. Các phiên bản cũ có thể cần một cú pháp khác.)
x(9,9)=~1;
gán logic 0
, hoặc false
(thu được bằng cách phủ định logic 1
) cho mục nhập (9,9)
của ma trận x
. Phần còn lại của các mục cũng được tự động khởi tạo thành logic 0
.
x(randperm(81,10))=1;
gán 1
(tự động chuyển thành logic 1
, hoặc true
) cho 10
các
81
mục của x
, được chọn ngẫu nhiên mà không thay thế. Những mục này là những cái có chứa bom.
conv2(+x,ones(3),'s')
là tên viết tắt của conv2(+x,ones(3),'same')
. Nó kết hợp ma trận x
(cần được truyền tới double
, sử dụng +
) với vùng lân cận 3 × 3 chứa 1
. Điều này đếm có bao nhiêu quả bom liền kề với mỗi mục. Đối với các mục có chứa một quả bom, nó bao gồm quả bom đó, nhưng giá trị sẽ được ghi đè lên sau đó.
y=[...+48 ''];
thêm 48 vào giá trị, để chuyển đổi từ số sang mã ASCII. Ghép nối với ma trận trống sẽ chuyển các mã ASCII này thành ký tự.
y(x)=42;
gán 42 (mã ASCII cho '*'
) cho các vị trí của bom. Các vị trí này được đưa ra bởi x
, ở đây được sử dụng như là một chỉ số hợp lý.
disp(y)
hiển thị kết quả.