Ваша задача - найти длину береговой линии карты островов, представленной на карте ASCII. Входная карта будет состоять из 1 или более #
символов, обозначающих землю, и пробелов, обозначающих воду. Береговая линия считается любой границей между сушей и водой, включая внутренние озера и острова.
Ваше решение должно быть законченной программой, которая считывает файл, строку или массив строк и выводит одно целое число на экран или стандартный вывод. Каждая строка ввода может иметь начальный или конечный пробел и ноль или более хеш-символов. Границы карты предполагаются космическими (водными).
Линии могут быть разной длины.
Примеры:
Input:
##
##
Output: 8
Input:
### ###
##### #
##
Output: 26
Input:
#####
# #
# # #
# #
#####
Output: 36
Это кодовый гольф, поэтому выигрывает наименьшее количество байтов.
Ответы:
Улитки , 8 байт
A
Параметр означает рассчитывать все пути , а совпадающие точки , которые , начиная матч завершается успешно с.\#
потребляет a#
,o
поворачивается в кардинальном направлении и!\#
является отрицательным утверждением, которое успешно выполняется, если#
перед нами нет a .источник
Pyth -
2523 байтаСначала он дополняет ввод до прямоугольника. Затем подсчитывает вхождения
" #"
более 4 перестановок транспозиций и инверсий вход + пространство.Попробуйте это онлайн здесь .
источник
ES6,
123115114 байтовИзменить: Сохранено 9 байтов благодаря @ edc65.
источник
a=>['',...a,''].map((s,i,a)=>s.replace(/#/g,(_,j)=>r+=(s[j-1]!=_)+(s[j+1]!=_)+(a[i-1][j]!=_)+(a[i+1][j]!=_)),r=0)|r
a=>a.map((s,i)=>s.replace(/#/g,(_,j)=>r+=(s[j-1]!=_)+(s[j+1]!=_)+((a[i-1]||'')[j]!=_)+((a[i+1]||'')[j]!=_)),r=0)|r
MATL , 42 байта
Это принимает входные данные в виде массива ячеек в форме
Сначала он преобразует входные данные в двумерный массив символов, дополняемый пробелами, а затем в матрицу нулей и единиц. Затем двумерную свертку применяют дважды с двумя разными масками: сначала для расширения матрицы, затем для обнаружения ребер.
Попробуйте онлайн!
источник
Japt,
2219 байтПредполагается, что ввод дополнен пробелами для формирования прямоугольника. Проверьте это онлайн!
Как это устроено
источник