iv id = “의 3BV 368d502a8c “>
지뢰 찾기 보드는 이미 솔루션을 알고있는 경우 보드를 해결하는 데 필요한 최소 왼쪽 클릭 수를 나타냅니다. " Bechtel의 이사회 벤치 마크 값 "을 나타냅니다. 사이트 에서 설명합니다.
아래는 해결 된 지뢰 찾기 보드입니다. 깃발은 지뢰를 나타냅니다. 지뢰가없는 타일은 대각선을 포함하여 인접한 지뢰 수를 나타냅니다. 단, " 0 "가 있어야하는 타일은 대신 공백으로 둡니다. 이미지는 보드를 해결하기 위해 클릭해야하는 타일을 보여줍니다.
3BV에 집계 된 클릭 수는 다음과 같습니다.
- 빈 타일 (인접한 광산 0 개)과 비어 있지 않은 이웃의 홍수로 가득 찬 각 영역에 대해 하나씩 .
- 다른 타일이 아닌 타일.
다른 예 (3BV = 39)
값의 2D 배열이 주어지면 0
지뢰 (또는 부울)의 경우 1
, 3BV를 반환 .
보드의 크기는 최소 8×8, 최대 2입니다. 4×30, 포함. 프로그램은 예제뿐만 아니라 가능한 모든 보드를 처리해야합니다.
참고 : 보드에는 광산 만 포함되지 않습니다.
I / O 예 :
[[0,0,0,0,0,0,0,0], [0,0,0,1,0,0,0,0], [0,0,0,1,0,0,1,0], [0,1,0,0,1,0,0,0], [0,0,1,0,0,0,0,1], [0,0,0,1,0,0,0,0], [0,0,0,0,0,0,1,0], [0,0,0,0,0,0,0,1]] 23 [[0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0], [0,0,0,0,0,1,1,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,0,0,0,0], [0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0,1,0,1,1,0,0,0,1,0,1,0,1,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,0], [0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1,0,1], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0], [0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0], [0,0,1,0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0], [1,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,1,1], [0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,0,1,1,0,0,0,0,1,1,0,0], [0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,1,0,1,1,0,0,0,1,0,0,0,1,1,0,0], [0,1,1,1,0,0,0,0,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0], [0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0,0,0,1,0,0,0], [0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0]] 187
댓글
- 정수 배열이 입력으로 괜찮습니까? 각 정수는 한 행을 코드합니다.
- @KarlNapf 아니오. 입력은 표시된대로 보드로 인식 할 수 있어야합니다.
- 표시된 내용을 기반으로 입력을 포함하여 더 많은 테스트 케이스를 제공 할 수 있습니까? 이미지 및 최대 크기 테스트 케이스일까요?
Answer
MATLAB, 92 90 86 83 79 74 72 바이트
x=input("");I=@(x)~imdilate(x,ones(3));[C,N]=bwlabel(I(x));nnz(I(C)-x)+N
이 솔루션은 0 “및 1″의 2D 행렬 형식으로 입력을 받아들이고 제공된 입력에 대해 3BV 값을 표시합니다.
다음은 MATLAB이없는 사용자를 위해 Octave에서 약간 수정 된 데모 입니다.
설명
입력 행렬은 1
“의 3 x 3 행렬을 사용하여 확장 된 다음 반전됩니다 (사용 ~
) 지뢰가없는 모든 포인트를 이웃 (1
) 또는 수행 (). 연결된 영역의 수를 결정하기 위해 bwlabel
를 사용하여 1
“의 연결된 각 영역에 레이블을 지정합니다. 첫 번째 출력은 레이블 매트릭스입니다. (0
여기서 입력은 0이고 1...N
범위의 값은 1
입력에서 N
는 해당 그룹이 속한 연결된 그룹의 색인입니다. 두 번째 출력은 영역 수입니다 (열기 위해 필요한 클릭 수). bwlabel
의 결과는 왼쪽 이미지에 표시됩니다.
imdilate
을 사용하여 bwlabel
의 첫 번째 출력을 확장합니다. 1
“의 3 x 3 행렬을 사용하여 div> (0이 아닌 모든 항목이 확장 됨). 결과는 중간 이미지에 표시됩니다.
남은 클릭 수를 확인하기 위해이 확장 영역 (~imdilate()
)에없는 사각형을 계산합니다. 광산 (-x
) (오른쪽 이미지의 흰색 사각형)이 아닌 총 열린 영역 수 (왼쪽 이미지의 다양한 색상 수)에 이것을 추가합니다. )를 사용하여 3BV를 가져옵니다.
Answer
Octave, 86 84 79 66 바이트
@(x)nnz(~imdilate(c=imerode(~x,o=ones(3)),o)-x)+max(bwlabel(c)(:))
이 솔루션은 ans
라는 익명 함수를 생성합니다. 그런 다음 0
“및 1
“의 2D 매트릭스를 전달할 수 있습니다. 논리는 MATLAB 답변과 동일하지만 Octave가 공간을 절약하기 위해 제공해야하는 몇 가지 트릭을 사용합니다.
이 솔루션을 사용하려면 image
패키지가 설치되어 있어야합니다. .
Answer
MATL, 24 22 21 바이트 (비경쟁 )
@Luis 덕분에 1 바이트 절약
4Y6Z+~l2#ZIw7MZ+G+~z+
MATL 온라인
설명
다시 말하지만 이것은이 질문에 대한 MATLAB 및 Octave 답변과 유사합니다.
% Implicitly grab input array 4Y6 % Push the literal [1 1 1; 1 1 1; 1 1 1] to the stack Z+ % Perform 2D convolution of the input with this array ~ % Negate the result l2#ZI % Call bwlabeln which dilates each open region and the second output % returns the number of open regions w % Flip the top two stack elements 7M % Push the literal [1 1 1; 1 1 1; 1 1 1] to the stack again Z+ % Perform 2D convolution G+ % Explicitly grab the input and add it to the result ~z % Count the number of 0"s in the result (the remaining number of clicks) + % Add the total number of remaining clicks to the number of open regions
댓글
- 비경쟁 이유가 무엇입니까?
- @CalculatorFeline 불행히도
bwlabeln
기능은 MATL 이후 에 도입되었습니다. 도전이 게시되었습니다.