당신의 임무는 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.