MATLAB, 94 93 bajty
rng(input(''));x(9,9)=~1;x(randperm(81,10))=1;y=[conv2(+x,ones(3),'s')+48 ''];y(x)=42;disp(y)
Przykład uruchomienia (pierwszy wiersz po kodzie to dane wpisane przez użytkownika):
>> 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
Wyjaśnienie
rng(input(''));
przyjmuje liczbę całkowitą i używa jej jako materiału siewnego. (Działa to w nowoczesnych wersjach MATLAB. Stare wersje mogą wymagać innej składni.)
x(9,9)=~1;
przypisuje wartość logiczną 0
lub false
(uzyskaną przez logiczne negowanie 1
) do wpisu (9,9)
macierzy x
. Pozostałe wpisy są automatycznie inicjowane również na logiczne 0
.
x(randperm(81,10))=1;
cesjonariusze 1
(autoomatically rzutować na logiczne 1
lub true
), aby 10
z
81
wpisów x
, wybranych losowo, bez zastąpienia. Te wpisy zawierają bomby.
conv2(+x,ones(3),'s')
to skrót od conv2(+x,ones(3),'same')
. Zwija matrycę x
(do której należy użyć double
, używając +
) z otoczeniem 3 × 3 zawierającym 1
. To liczy, ile bomb sąsiaduje z każdym wejściem. Wpisy zawierające bombę obejmują tę bombę, ale wartość zostanie później zastąpiona.
y=[...+48 ''];
dodaje 48 do wartości, aby przekonwertować z numeru na kod ASCII. Łączenie z pustą macierzą powoduje rzutowanie tych kodów ASCII na znaki.
y(x)=42;
przypisuje 42 (kod ASCII dla '*'
) do pozycji bomb. Te pozycje są podawane przez x
, który jest tutaj używany jako indeks logiczny.
disp(y)
wyświetla wynik.