Trova la costa


14

Il tuo compito è trovare la lunghezza della costa di una mappa delle isole fornita in una mappa ASCII. La mappa di input sarà composta da 1 o più #caratteri che indicano la terra e spazi che indicano l'acqua. La costa è considerata qualsiasi confine tra terra e acqua, compresi i laghi e le isole interne.

La tua soluzione dovrebbe essere un programma completo che legge in un file, una stringa o un array di stringhe e genera un singolo numero intero sullo schermo o sullo stdout. Ogni riga di input può avere spazio iniziale o finale e zero o più caratteri hash. I bordi della mappa sono considerati spazio (acqua).

Le linee possono avere lunghezze diverse.

Esempi:

Input:
##
##
Output: 8

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

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

Questo è il golf del codice, quindi vince il numero di byte più piccolo.


Possiamo supporre che l'input sia riempito con un rettangolo con spazi?
— Martin Ender,

Perché un programma completo? Di solito sono consentite anche funzioni e non vedo una buona ragione per cui questa sfida sia restrittiva.
— nimi,

@ MartinBüttner, sì. Speravo che "I confini della mappa siano considerati spazio (acqua)" lo coprissero. Fammi sapere se dovrei chiarirlo.
— Logic Knight,

@nimi, capisco la tua preoccupazione, ma dato che la sfida ha 12 ore, ci sono 4 risposte e altre persone potrebbero lavorarci su adesso, sono riluttante a cambiarla.
— Logic Knight,

@CarpetPython no Intendo se possiamo supporre che tutte le linee dell'input abbiano la stessa lunghezza.
— Martin Ender,

Risposte:


14

Lumache , 8 byte

A
\#o!\#

L' Aopzione significa contare tutti i percorsi corrispondenti piuttosto che i punti di partenza da cui una partita ha successo. \#consuma a #, ogira in una direzione cardinale ed !\#è un'asserzione negativa che ha successo se non c'è un #davanti a noi.


4

Pyth - 25 23 byte

Per prima cosa imbottisce l'input in un rettangolo. Quindi conta le occorrenze di " #"oltre le 4 permutazioni di trasposizioni e inversioni di input + spazio.

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

Provalo online qui .


In che modo può rilevare le coste ai margini dell'ingresso?
— feersum

L'ho riempito per primo, mi sono dimenticato di dirlo.
— Maltysen,

3

ES6, 123 115 114 byte

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

Modifica: salvato 9 byte grazie a @ edc65.


Non sono sicuro che questo sia un programma completo che scrive su stdout o sullo schermo. A parte questo: dovresti usare param della funzione di sostituzione. 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
— edc65,

E meglioa=>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
— edc65,

@ edc65 Ah, ovviamente, perdo due byte dovendo acquisire il valore dell'array interno. Inoltre, bella cattura su quel parametro di sostituzione.
— Neil,

2

MATL , 42 byte

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

Questo accetta l'input come una matrice di celle di stringhe, del modulo

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

Converte prima l'input in un array di caratteri 2D, riempiendo gli spazi, quindi in una matrice di zero e uno. La convoluzione 2D viene quindi applicata due volte, con due diverse maschere: la prima per espandere la matrice, la seconda per rilevare i bordi.

Provalo online!


0

Japt, 22 19 byte

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

Suppone che l'input sia riempito di spazi per formare un rettangolo. Provalo online!

Come funziona

          // 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.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.