해안선 찾기 공백과 0 개 이상의 해시 문자가있을

당신의 임무는 ASCII지도에서 제공되는 섬지도의 해안선 길이를 찾는 것입니다. 입력지도는 #토지를 나타내는 하나 이상의 문자와 물을 나타내는 공백으로 구성됩니다. 해안선은 내륙 호수와 섬을 포함하여 육지와 물 사이의 경계로 간주됩니다.

솔루션은 파일, 문자열 또는 문자열 배열을 읽고 화면 또는 stdout에 단일 정수를 출력하는 완전한 프로그램이어야합니다. 각 입력 행에는 선행 또는 후행 공백과 0 개 이상의 해시 문자가있을 수 있습니다. 지도의 경계는 공간 (물) 인 것으로 가정합니다.

줄 길이가 다를 수 있습니다.

예 :

Input:
##
##
Output: 8

Input:
    ###    ###
  #####     #
   ##
Output: 26

Input:
  #####
  #   #
  # # #
  #   #
  #####
Output: 36

이것은 코드 골프이므로 가장 작은 바이트 수가 이깁니다.



답변

달팽이 , 8 바이트

A
\#o!\#

A옵션은 일치하는 시작 지점이 아닌 일치하는 모든 경로를 계산하는 것을 의미합니다. \#소비 #, o추기경 방향으로 회전하고, !\#가없는 경우 성공 부정적인 주장이다 #우리 앞에.


답변

Pyth- 25 23 바이트

먼저 입력을 rect에 채 웁니다. 그런 다음 " #"입력 + 공간의 전치 및 반전의 4 개 순열 이상의 발생 횟수를 계산합니다 .

/ssm_B++;j;d;CB.t.zd" #

여기에서 온라인으로 사용해보십시오 .


답변

ES6, 123 (115) 114 바이트

a=>a.map((s,i)=>s.replace(/#/g,(h,j)=>r+=(s[j-1]!=h)+(s[j+1]!=h)+((a[i-1]||'')[j]!=h)+((a[i+1]||'')[j]!=h)),r=0)|r

편집 : @ edc65 덕분에 9 바이트가 절약되었습니다.


답변

MATL , 42 바이트

c2\FTFt!*Y+2*qFTFtl-4lhhbvv_2X53$Y+t0>)s2/

입력을 문자열 형식의 셀형 배열로 받아들입니다.

{'#####', '#   #', '# # #', '#   #', '#####'}

먼저 입력을 2D char 배열로 변환하고 공백으로 채운 다음 0과 1의 행렬로 변환합니다. 2D 컨벌루션은 두 개의 다른 마스크로 두 번 적용됩니다. 첫 번째는 매트릭스를 확장하기위한 것이고, 두 번째는 에지를 감지하기위한 것입니다.

온라인으로 사용해보십시오!


답변

apt, 22 19 바이트

4o £UzX è"#%s|#$} x

입력이 공백으로 채워져 사각형을 형성한다고 가정합니다. 온라인으로 테스트하십시오!

작동 원리

          // Implicit: U = input string, S = a space
4o £    } // Create the array [0,1,2,3], and map each item X to:
UzX       //  Rotate U by 90 degrees X times.
è"#%s|#$  //  Count the number of "#"s followed by a space, newline, or end-of-string.
x         // Sum the resulting array.