MATLAB, 94 93 octets
rng(input(''));x(9,9)=~1;x(randperm(81,10))=1;y=[conv2(+x,ones(3),'s')+48 ''];y(x)=42;disp(y)
Exemple d'exécution (la première ligne après le code est l'entrée saisie par l'utilisateur):
>> 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
Explication
rng(input(''));
prend un entier et l'utilise comme graine. (Cela fonctionne dans les versions MATLAB modernes. Les anciennes versions peuvent nécessiter une syntaxe différente.)
x(9,9)=~1;
assigne logique 0
, ou false
(obtenu en niant logiquement 1
) à l'entrée (9,9)
d'une matrice x
. Les autres entrées sont également automatiquement initialisées en logique 0
.
x(randperm(81,10))=1;
ayants 1
(autoomatically coulés à logique 1
ou true
) à 10
des
81
entrées de x
, choisis de manière aléatoire sans remplacement. Ces entrées sont celles qui contiennent des bombes.
conv2(+x,ones(3),'s')
est une abréviation de conv2(+x,ones(3),'same')
. Il convole la matrice x
(qui doit être convertie en double
, utilisant +
) avec un voisinage 3 × 3 contenant 1
. Cela compte le nombre de bombes adjacentes à chaque entrée. Pour les entrées qui contiennent une bombe, elle inclut cette bombe, mais la valeur y sera remplacée plus tard.
y=[...+48 ''];
ajoute 48 à la valeur, pour convertir le nombre en code ASCII. La concaténation avec la matrice vide convertit ces codes ASCII en caractères.
y(x)=42;
attribue 42 (code ASCII pour '*'
) aux positions des bombes. Ces positions sont données par x
, qui est ici utilisé comme index logique.
disp(y)
affiche le résultat.