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
(自动转换为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代码转换为char。
y(x)=42;
为'*'
炸弹位置分配42(的ASCII码)。这些位置由给出x
,在此用作逻辑索引。
disp(y)
显示结果。