Votre tâche consiste à trouver la longueur du littoral d'une carte des îles fournie dans une carte ASCII. La carte d'entrée comprendra un ou plusieurs #
caractères qui indiquent la terre et des espaces qui indiquent l'eau. Le littoral est considéré comme n'importe quel bord entre la terre et l'eau, y compris les lacs intérieurs et les îles.
Votre solution doit être un programme complet qui lit dans un fichier, une chaîne ou un tableau de chaînes et renvoie un seul entier à l'écran ou à la sortie standard. Chaque ligne d'entrée peut avoir un espace de début ou de fin et zéro ou plusieurs caractères de hachage. Les frontières de la carte sont supposées être de l'espace (eau).
Les lignes peuvent être de différentes longueurs.
Exemples:
Input:
##
##
Output: 8
Input:
### ###
##### #
##
Output: 26
Input:
#####
# #
# # #
# #
#####
Output: 36
C'est le golf par code, donc le plus petit nombre d'octets gagne.
Réponses:
Escargots , 8 octets
L'
A
option signifie compter tous les chemins correspondants plutôt que les points de départ à partir desquels une correspondance réussit.\#
consomme un#
,o
tourne dans une direction cardinale, et!\#
est une affirmation négative qui réussit s'il n'y en a pas#
devant nous.la source
Pyth -
2523 octetsTout d'abord, il remplit l'entrée d'un rect. Compte ensuite les occurrences de
" #"
plus de 4 permutations de transpositions et inversions de l'entrée + espace.Essayez-le en ligne ici .
la source
ES6,
123115114 octetsEdit: 9 octets enregistrés grâce à @ edc65.
la source
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 octets
Cela accepte l'entrée comme un tableau de cellules de chaînes, de la forme
Il convertit d'abord l'entrée en un tableau de caractères 2D, en remplissant les espaces, puis en une matrice de zéros et de uns. La convolution 2D est ensuite appliquée deux fois, avec deux masques différents: le premier pour étendre la matrice, le second pour détecter les bords.
Essayez-le en ligne!
la source
Japt,
2219 octetsSuppose que l'entrée est complétée par des espaces pour former un rectangle. Testez-le en ligne!
Comment ça fonctionne
la source