MATLAB, 94 93 Bytes
rng(input(''));x(9,9)=~1;x(randperm(81,10))=1;y=[conv2(+x,ones(3),'s')+48 ''];y(x)=42;disp(y)
Beispiellauf (die erste Zeile nach dem Code ist die vom Benutzer eingegebene Eingabe):
>> 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
Erläuterung
rng(input(''));
Nimmt eine ganze Zahl und verwendet sie als Startwert. (Dies funktioniert in modernen MATLAB-Versionen. Alte Versionen benötigen möglicherweise eine andere Syntax.)
x(9,9)=~1;
ordnet logische 0
oder false
(durch logische Negierung erhalten 1
zu dem Eintrag) (9,9)
eine Matrix x
. Die restlichen Einträge werden automatisch auch logisch 0
initialisiert.
x(randperm(81,10))=1;
ordnet 1
(automatisch umgewandelt in logisch 1
oder true
) 10
den
81
Einträgen zu x
, die nach dem Zufallsprinzip ausgewählt wurden, ohne sie zu ersetzen. Diese Einträge enthalten Bomben.
conv2(+x,ones(3),'s')
ist eine Abkürzung von conv2(+x,ones(3),'same')
. Es faltet die Matrix x
(in die gegossen double
werden muss +
) mit einem 3 × 3-Nachbarschaftsgehalt zusammen 1
. Dies zählt, wie viele Bomben sich neben jedem Eintrag befinden. Einträge, die eine Bombe enthalten, enthalten diese Bombe, der Wert wird jedoch später überschrieben.
y=[...+48 ''];
Addiert 48 zum Wert, um von Zahl in ASCII-Code zu konvertieren. Durch die Verkettung mit der leeren Matrix werden diese ASCII-Codes in Zeichen umgewandelt.
y(x)=42;
weist '*'
den Positionen der Bomben 42 (ASCII-Code für ) zu. Diese Positionen sind gegeben durch x
, was hier als logischer Index verwendet wird.
disp(y)
zeigt das Ergebnis an.