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')
. 포함하는 3x3 이웃과 함께 행렬을 변환합니다 x
(을 double
사용하여 캐스팅해야 함 +
) 1
. 이것은 각 엔트리에 인접한 폭탄의 수를 계산합니다. 폭탄이 포함 된 항목에는 해당 폭탄이 포함되지만 나중에 그 값을 덮어 씁니다.
y=[...+48 ''];
숫자를 ASCII 코드로 변환하기 위해 값에 48을 더합니다. 빈 행렬과 연결하면 이러한 ASCII 코드가 문자로 전송됩니다.
y(x)=42;
'*'
폭탄의 위치에 42 (ASCII 코드 )를 할당합니다 . 이 위치는로 표시되며 x
여기에서 논리 인덱스로 사용됩니다.
disp(y)
결과를 표시합니다.