Ihre Aufgabe ist es, die Länge der Küste einer Karte von Inseln in einer ASCII-Karte zu finden. Die Eingabekarte besteht aus einem oder mehreren #
Zeichen für Land und Leerzeichen für Wasser. Die Küste gilt als ein Rand zwischen Land und Wasser, einschließlich Binnenseen und Inseln.
Ihre Lösung sollte ein vollständiges Programm sein, das eine Datei, eine Zeichenfolge oder ein Array von Zeichenfolgen einliest und eine einzelne Ganzzahl auf dem Bildschirm oder der Standardausgabe ausgibt. Jede Eingabezeile kann ein vor- oder nachgestelltes Leerzeichen sowie null oder mehr Hash-Zeichen enthalten. Die Ränder der Karte werden als Raum (Wasser) angenommen.
Zeilen können unterschiedlich lang sein.
Beispiele:
Input:
##
##
Output: 8
Input:
### ###
##### #
##
Output: 26
Input:
#####
# #
# # #
# #
#####
Output: 36
Dies ist Codegolf, also gewinnt die kleinste Byteanzahl.
Antworten:
Schnecken , 8 Bytes
Die
A
Option bedeutet, dass alle übereinstimmenden Pfade gezählt werden und nicht, ab welchen Startpunkten eine Übereinstimmung erfolgreich ist.\#
verbraucht a#
,o
dreht sich in eine Himmelsrichtung und!\#
ist eine negative Behauptung, die erfolgreich ist, wenn es kein#
vor uns gibt.quelle
Pyth -
2523 BytesZuerst wird der Eingang mit einem Rect aufgefüllt. Zählt dann das Auftreten von
" #"
über 4 Permutationen von Transpositionen und Umkehrungen des Input + Space.Probieren Sie es hier online aus .
quelle
ES6,
123115114 BytesBearbeiten: 9 Bytes dank @ edc65 gespeichert.
quelle
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 Bytes
Dadurch wird die Eingabe als Zellenarray von Zeichenfolgen des Formulars akzeptiert
Die Eingabe wird zuerst in ein 2D-Zeichen-Array konvertiert, mit Leerzeichen aufgefüllt und dann in eine Matrix aus Nullen und Einsen. Die 2D-Faltung wird dann zweimal mit zwei verschiedenen Masken angewendet: erstens zum Erweitern der Matrix, zweitens zum Erkennen von Kanten.
Probieren Sie es online!
quelle
Japt,
2219 BytesAngenommen, die Eingabe wird mit Leerzeichen aufgefüllt, um ein Rechteck zu bilden. Online testen!
Wie es funktioniert
quelle