Quanti Jimmys possono adattarsi?


29

In questa semplice ma divertente sfida , ti è stato chiesto di determinare se Jimmy sarebbe caduto dalla loro piattaforma. Jimmy ha tre parti del corpo /, oe \disposti come questa

/o\

Le piattaforme sono rappresentate con -. Jimmy cadrà dalla loro piattaforma se hanno due o più parti del corpo che non sono direttamente sopra una piattaforma.

Qualche esempio:

   /o\
- -------

Jimmy si bilancerà poiché tutte le loro parti del corpo sono sopra a -.

   /o\
    ------   ---

Jimmy sarà bilanciato poiché due parti del corpo sono al di sopra di -s.

 /o\
-- ----  --

Jimmy si bilancerà anche se sono divisi tra due piattaforme

  /o\
   -

Jimmy non si bilancerà poiché due parti del corpo non sono sopra una piattaforma.


Il tuo compito è scrivere un programma che prende una piattaforma come un contenitore allungato contenente solo se -e s (ad esempio una stringa) ed emette il numero di Jimmys che può essere collocato sulla piattaforma in modo tale che nessuno di essi cadrà e nessuno di loro sovrapposizione. Un Jimmy può avere una delle sue parti del corpo alla sinistra dell'inizio della corda o alla destra della fine della corda.

Si tratta di quindi le risposte sono classificate in byte con l'obiettivo di ottenere meno byte.

Casi test

ingressi

-  -  -

- -
--
-- --
----
- -- --
------- -

Uscite rispettive

0
0
1
1
2
2
2
3

Risposte:


15

JavaScript (ES6),  45 41  40 byte

4 byte salvati grazie a @Shaggy

s=>(0+s+0).split(/.--|-.-|--./).length-1

Provalo online!



7
@Shaggy Grazie! Sapevo che qualcosa non andava lì, ma nel frattempo ho dovuto aiutare mia moglie a livello di Super Mario Galaxy ... ed era anche un problema con le piattaforme rotte. : p
Arnauld

2
l' ---non era seduto bene con me sia, fino a quando stavo lavorando al mio porto e resi conto che non erano necessari. Penso che lo chiamerò un giorno qui, afferro un sacco di lattine e lancio me stesso su SMG - non ci gioco da un secolo.
Shaggy

E ora tutte le altre risposte usano lo stesso regex.
Cœur

8

Python 2 , 53 byte

lambda s:len(re.findall('.--|-.-|--.',`s`))
import re

Provalo online!

Basato sul regex di Arnauld . Cerca avidamente tutte le sottostringhe di lunghezza 3 non sovrapposte con due o più -. Un trucco è fare `s`per racchiudere la stringa di input tra virgolette come riempimento per lasciare spazio a Jimmys che si blocca su entrambe le estremità come

/o\/o\
'----'

Python 2 , 57 byte

f=lambda s:'--'in s[:3]*2and-~f(s[3:])or s>''and f(s[1:])

Provalo online!

Richiede un formato I / O di formaggio dell'input già tra virgolette. Uscite Falseper 0.

Una funzione ricorsiva che posiziona ogni Jimmy nella posizione più a sinistra consentita, posizionando Jimmy sui primi tre personaggi se possono contenere Jimmy o eliminando in altro modo il primo personaggio. Un trucco carino è verificare se ne s[:3]contiene due o più -facendo '--'in s[:3]*2, che concatena due copie di s[:3]e controlla due adiacenti -.



3

Japt , 16 byte

Basato sulla soluzione JS originale di Arnauld. Ho provato alcuni metodi diversi per ottenere l'imbottitura necessaria su entrambi i lati dell'input, ma sono arrivati ​​tutti alla stessa lunghezza, cercando ancora un modo più breve ...

ûUÊÄÄ è".--|-."ê

Provalo

ûUÊÄÄ è".--|-."ê     :Implicit input of string U
û                    :Centre pad with spaces to length
 UÊ                  :  Length of U
   ÄÄ                :  Add 1, twice
      è              :Count the occurrences of
       ".--|-."ê     :  ".--|-." palindromised, resulting in the RegEx /.--|-.-|--./g

3

Excel, 96 byte

A1= piattaforma. Inserito come array Formula Ctrl+ Shift+Enter

=SUM(IF(LEN(TRIM(MID(IF(MOD(LEN(A1),3)=1," ","")&A1,3*ROW(INDIRECT("A1:A"&LEN(A1)))-2,3)))>1,1))

3

05AB1E , 16 byte

ðì‚ε3ôʒ'-¢2@}g}à

Può sicuramente essere giocato a golf .. A volte è fastidioso vedere tutte queste risposte regex in una sfida quando si utilizza 05AB1E, che manca di regex di qualsiasi tipo. ;)

Provalo online o verifica tutti i casi di test .

Spiegazione:

ðì            # Prepend a space before the (implicit) input
             # Pair it with the unmodified (implicit) input
   ε          # Map both to:
    3ô        #  Split them into parts of size 3
      ʒ       #  Filter these parts by:
       '-¢   '#   Where the amount of "-"
          2@  #   Is larger than or equal to 2
      }g      #  After the filter: take the length to get the amount of items left
            # After the map: get the maximum of the two
              # (which is output implicitly as result)



2

Java 8, 41 byte

s->(0+s+10).split(".--|--.|-.-").length-1

Provalo online.

Porto di @Arnauld risposta JavaScript s' , se non che +0è +10per casi di test fix come ----. Ciò è necessario perché il String#splitpredefinito in Java rimuoverà le stringhe vuote finali per impostazione predefinita. Questo può essere modificato aggiungendo un parametro aggiuntivo al splitbuiltin (che è 0di default in split-builtin con un singolo argomento String). Per citare l'utilizzo di questo parametro aggiuntivo dai documenti:


nn-1n
n
n il modello verrà applicato il maggior numero di volte possibile, l'array può avere qualsiasi lunghezza,e le stringhe vuote finali verranno eliminate .

Per questo motivo, di solito .split("...",-1)viene utilizzato per conservare TUTTE le stringhe vuote finali e avrei potuto utilizzarlo anche per questa risposta ( Provalo online ). In questo caso, tuttavia, la modifica di +0in +10consente di risparmiare due byte rispetto a ,-1. :)



0

Carbone , 25 byte

Pθ↖Fθ¿›№KM-¹«⊞υωM³→»→⎚ILυ

Provalo online! Il collegamento è alla versione dettagliata del codice. Spiegazione:

Pθ↖

Stampa la piattaforma senza muovere il cursore, quindi sposta il cursore verso l'alto e verso sinistra poiché questa è la prima potenziale posizione di Jimmy.

Fθ

Cerca tanti Jimmies quante sono le posizioni della piattaforma.

¿›№KM-¹

Controlla se c'è più di un pezzo di piattaforma in questa posizione.

«⊞υω

In tal caso, annota una posizione Jimmy valida ...

M³→»

... e sposta tre personaggi a destra in modo che i Jimmies non si sovrappongano.

Altrimenti la prossima potenziale posizione di Jimmy è un personaggio a destra.

⎚ILυ

Svuota la piattaforma e genera il conteggio delle posizioni rilevate.



0

Olmo 0,19, 108 byte

import Regex as R
f p=List.length<|R.find(Maybe.withDefault R.never<|R.fromString".--|-.-|--.")(" "++p++" ")

Basato sulla regex nella risposta JavaScript di Arnauld . Verifica qui tutti i casi di test .

Soluzione alternativa senza regex, significativamente più lunga a 171 byte :

f p=(String.foldl(\z{x,y,s,c}->let(t,d)=if s<1&&List.length(List.filter((==)'-')[x,y,z])>1 then(2,c+1)else(max 0 s-1,c)in{x=y,y=z,s=t,c=d}){x=' ',y=' ',s=0,c=0}(p++" ")).c

Verifica qui tutti i casi di test .

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.