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')
. Він поєднує матрицю x
(яку потрібно передати double
, використовуючи +
) із сусідством 3 × 3 1
. Це підраховує кількість бомб, які примикають до кожного запису. Для записів, що містять бомбу, вона включає цю бомбу, але значення там буде перезаписано пізніше.
y=[...+48 ''];
додає значення до 48 для перетворення з числа в код ASCII. Об’єднання з порожньою матрицею передає ці ASCII коди до символів.
y(x)=42;
призначає 42 (код ASCII для '*'
) позицій бомб. Ці позиції задаються символом x
, який тут використовується як логічний покажчик.
disp(y)
відображає результат.