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