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)
відображає результат.