¿Cuántos Jimmys pueden caber?


29

En este desafío simple pero divertido , se le pidió que determinara si Jimmy se caería de su plataforma. Jimmy tiene tres partes del cuerpo /, oy \dispuesta como este

/o\

Las plataformas se representan con - . Jimmy se caerá de su plataforma si tienen dos o más partes del cuerpo que no están directamente encima de una plataforma.

Algunos ejemplos:

   /o\
- -------

Jimmy se equilibrará ya que todas sus partes del cuerpo están por encima de a -.

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

Jimmy se equilibrará ya que dos partes del cuerpo están por encima del -s.

 /o\
-- ----  --

Jimmy se equilibrará aunque estén divididos entre dos plataformas

  /o\
   -

Jimmy no se equilibrará ya que dos partes del cuerpo no están por encima de una plataforma.


Su tarea es escribir un programa que tome una plataforma como un contenedor alargado que contenga solo -sy s (por ejemplo, una cadena) y genere el número de Jimmys que se pueden colocar en la plataforma de modo que ninguno de ellos se caiga y ninguno de ellos caiga superposición. Un Jimmy puede tener una de sus partes del cuerpo a la izquierda del comienzo de la cuerda o a la derecha del final de la cuerda.

Este es el por lo que las respuestas se puntúan en bytes con menos bytes como objetivo.

Casos de prueba

Entradas

-  -  -

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

Salidas respectivas

0
0
1
1
2
2
2
3

Respuestas:


15

JavaScript (ES6),  45 41  40 bytes

Guardado 4 bytes gracias a @Shaggy

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

Pruébalo en línea!



77
@ Shaggy Gracias! Yo sabía que algo estaba mal allí, pero tenía que ayudar a mi esposa en un cierto nivel de Super Mario Galaxy, mientras tanto ... y era también un problema sobre plataformas rotas. : p
Arnauld

2
el ---no estaba sentado bien a mí tampoco, hasta que yo estaba trabajando en mi puerto y se dio cuenta de que no eran necesarios. Creo que lo llamaré un día aquí, agarrar una bolsa de latas y tirar SMG yo mismo - no lo he jugado en una época.
Shaggy

Y ahora todas las otras respuestas están usando la misma expresión regular.
Coeur

8

Python 2 , 53 bytes

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

Pruébalo en línea!

Basado en la expresión regular de Arnauld . Busca con avidez todas las subcadenas de longitud 3 no superpuestas con dos o más -. Un truco consiste en `s`encerrar la cadena de entrada entre comillas como relleno para dejar espacio para que Jimmys cuelgue en cualquier extremo como

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

Python 2 , 57 bytes

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

Pruébalo en línea!

Requiere un formato cursi de E / S de la entrada ya entre comillas. Salidas Falsepara 0.

Una función recursiva que coloca a cada Jimmy en la posición más a la izquierda permitida, ya sea colocando a Jimmy sobre los primeros tres caracteres si pueden sostener a Jimmy, o eliminando el primer carácter. Un buen truco es verificar si s[:3]contiene dos o más -haciendo '--'in s[:3]*2, lo que concatena dos copias s[:3]y comprueba dos adyacentes -.



3

Japt , 16 bytes

Basado en la solución JS original de Arnauld. Intenté algunos métodos diferentes para obtener el relleno necesario a cada lado de la entrada, pero todos llegaron a la misma longitud, aún buscando una forma más corta ...

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

Pruébalo

û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 bytes

A1= plataforma. Ingresado como matriz Fórmula 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 bytes

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

Definitivamente se puede jugar golf. A veces es molesto ver todas estas respuestas de expresiones regulares en un desafío cuando se usa 05AB1E, que carece de expresiones regulares de ningún tipo. ;)

Pruébelo en línea o verifique todos los casos de prueba .

Explicación:

ðì            # 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 bytes

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

Pruébalo en línea.

Puerto de la respuesta de JavaScript de @Arnauld , excepto que +0es +10para solucionar casos de prueba como ----. Esto es necesario porque el valor String#splitincorporado en Java eliminará las cadenas vacías finales de forma predeterminada. Esto se puede cambiar agregando un parámetro adicional al splitbuiltin (que está 0por defecto en el split-builtin con un solo argumento String). Para citar el uso de este parámetro adicional de los documentos:


nortenorte-1norte
norte
nortey las cadenas vacías finales se descartarán .

Debido a esto, generalmente .split("...",-1)se usa para retener TODAS las cadenas vacías finales, y también podría haberlo usado para esta respuesta ( Pruébelo en línea ). Sin embargo, en este caso, cambiar el +0a +10guarda dos bytes sobre el ,-1. :)



0

Carbón de leña , 25 bytes

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

Pruébalo en línea!El enlace es a la versión detallada del código. Explicación:

Pθ↖

Imprima la plataforma sin mover el cursor, luego mueva el cursor hacia arriba y hacia la izquierda, ya que esa es la primera posición potencial de Jimmy.

Fθ

Busque tantos Jimmies como puestos de plataforma.

¿›№KM-¹

Verifique si hay más de una pieza de plataforma en esta posición.

«⊞υω

Si es así, observe una posición válida de Jimmy ...

M³→»

... y mueve tres personajes a la derecha para que los Jimmies no se superpongan.

De lo contrario, la siguiente posición potencial de Jimmy es un personaje a la derecha.

⎚ILυ

Despeje la plataforma y genere el recuento de posiciones descubiertas.



0

Elm 0.19, 108 bytes

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

Basado en la expresión regular en el JavaScript de Arnauld respuesta de . Verifique todos los casos de prueba aquí .

Solución alternativa sin expresiones regulares, significativamente más larga en 171 bytes :

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

Verifique todos los casos de prueba aquí .

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.