Jimmy necesita tu ayuda!

17

Parece que recientemente, ha habido muchos Jimmys cayendo a su muerte, como se puede ver aquí , y aquí donde se le pidió que determinara si Jimmy caería. Es hora de detener esta locura y tratar de salvar a Jimmy.

Jimmy tiene tres partes del cuerpo /, oy \dispuesta como este

/o\

Las plataformas están representadas 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 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.


Como el suministro de mi plataforma se está agotando, solo tengo plataformas con una longitud de 5, y es importante que usemos la menor cantidad posible.

Su tarea es tomar una entrada de Jimmys y generar una serie de plataformas que guardarán todos los Jimmys en la entrada. Su salida debe usar la menor cantidad de plataformas posible, pero cada plataforma debe tener 5 -'de ancho.

Tenga en cuenta que la regla de la plataforma es de 5 de -ancho, significa que cada plataforma debe tener un espacio entre ellas. ----------no es válido en la salida ya que se considerará una plataforma de longitud 10 y no dos plataformas de longitud 5.

Casos de prueba

/o\  /o\/o\    // input
----- -----    // output
/o\           /o\
-----       -----
/o\           /o\      // same input as above
-----          -----   // this is also valid output
    /o\ /o\
     -----

Aplican reglas estándar.

Este es el código de golf, ¡que gane la respuesta más corta!

Quinn
fuente
2
@Veskah siempre y cuando todos los Jimmys se guarden utilizando la menor cantidad de plataformas posibles, la posición no importa, por lo que habrá múltiples salidas válidas para cada entrada. No hay condición sobre cuántos Jimmys habrá en la entrada, una cadena vacía sería una entrada válida.
Quinn el
3
El caso de prueba 4 parece una cara aterradora
datos caducados el
2
Seguimiento: coloque tantos Jimmys como sea posible en las plataformas de tal manera que no se caigan.
Val dice Reinstate Monica
2
@val esa es en realidad una de las preguntas vinculadas - Seguí después de esa: P
Quinn
77
Puedo ver muchos seguimientos de Jimmy en el futuro.
connectyourcharger

Respuestas:

2

Carbón , 17 15 bytes

W‹ⅈLθ«×⁵№o\§θⅈ→

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

W‹ⅈLθ«

Repita mientras la posición del cursor sea menor que la longitud de la entrada.

×⁵№o\§θⅈ

Si el carácter en esa posición en la entrada es una oo una \, imprima 5 -s.

Pasa al siguiente personaje, garantizando así al menos un espacio entre plataformas.

La solución anterior de 17 bytes es en mi humilde opinión más "Carbón-y".

θ⸿Fθ«×⁵¬№ /⊟KD²↑→

Pruébalo en línea! El enlace es a la versión detallada del código. La salida incluye entrada, lo que demuestra la corrección de la solución. Explicación:

θ⸿

Imprima la entrada y avance al inicio de la siguiente línea.

Fθ«

Pase sobre cada carácter de la entrada para asegurarse de que no se pierda a Jimmy.

×⁵¬№ /⊟KD²↑

Mira el personaje sobre el cursor. Si no hay ninguno, o si es espacio o /, no haga nada, de lo contrario imprima 5 -s.

Pasa al siguiente personaje, garantizando así al menos un espacio entre plataformas.

Neil
fuente
7

Python 2 , 70 67 bytes

lambda s:S('/',' ',S("\S.{5}","----- ",s+' '*5))
import re;S=re.sub

Pruébalo en línea!

-3 bytes gracias a Kevin Cruijssen y Neil

No es el más bonito, no estoy seguro de cómo manejar mejor esas barras sobrantes ...

Desafortunadamente, no podemos reemplazar ambos extremos de cada plataforma con espacios usando una sola re.subllamada, porque en el caso de que 2 plataformas estén separadas por un espacio, la brecha entre ellas no puede coincidir más de una vez. Una afirmación de mirar hacia atrás / mirar hacia atrás no ayudará, porque todo lo que coincida con esas afirmaciones no se reemplaza.

Usando una sola re.subreferencia:

Python 3.8 (prelanzamiento) , 78 bytes

lambda s:[s:=re.sub(".[^/ -].{5}"," ----- ",s+"  ",1)for c in s][-1]
import re

Pruébalo en línea!

siete negativo
fuente
69 bytes reemplazando primero el /y luego el [^ ].
Kevin Cruijssen
El golf sugerido de @ Neil en mi respuesta de Retina también funciona para usted: 67 bytes .
Kevin Cruijssen
4

JavaScript (ES6),  56 55  54 bytes

s=>[...s+1e4].map(c=>(s--?s:s=c>{}&&5)?'-':' ').join``

Pruébalo en línea!

O 47 bytes si devolver una matriz de caracteres es aceptable.

Arnauld
fuente
2

Python 3 , 158 164 160 bytes

a=input();r=""
for i,c in enumerate(a):
 try:r[i]
 except:
  if c in"/o":
   r+=(a[i+5<len(a)and i+5or len(a)-1]=="o"and" "or"")+"----- "
  else:r+=" "
print(r)

Pruébalo en línea!

Esta es mi primera respuesta de código de golf, ¡y estoy feliz de que sea una pregunta de Jimmy!

Explicación:

  • a=input();r="": Tome la entrada e inicialice una nueva cadena r.

  • for i,c in enumerate(a):: Enumerar sobre la entrada.

  • try:r[i] ... except:: Vea si r[i]existe; de ​​lo contrario, procese el exceptbloque.

  • if c in"/o":: Comprueba si el personaje actual está en las dos primeras partes del cuerpo de Jimmy.

  • r+=(a[i+5<len(a)and i+5or len(a)-1]=="o"and" "or"")+"----- ": Si es así, agregue un nuevo segmento. Agregue un espacio antes de nuestro nuevo segmento si otra cabeza de Jimmy está presente en cinco caracteres.

  • else:r+=" ": De lo contrario, solo agregue un espacio.

  • print(r): Imprime nuestro resultado final.

conecta tu cargador
fuente
Bastante cerca, pero creo que esto en realidad no funciona para todos los casos de prueba. Debería usar la menor cantidad de plataformas posible y su último ejemplo usa 2 cuando podría hacerse con 1
Quinn
@Quinn Shoot. Err, no competir hasta que arregle eso.
connectyourcharger
@connectyourcharger "no compite" no valida una solución no válida. Recomiendo eliminarlo si no lo va a arreglar por algún tiempo (por ejemplo, los próximos minutos).
Erik the Outgolfer
@Quinn lo arreglé ahora.
connectyourcharger
@connectyourcharger ¡Bien!
Quinn el
2

Retina , 23 21 bytes

/

$
5* 
\S.{5}
5*- 

-2 bytes gracias a @Neil .

Contiene un solo espacio final en las líneas segunda, cuarta y sexta.

Puerto de la respuesta Python 2 de @negativeSeven , ¡así que asegúrate de votarlo!

Pruébalo en línea.

Explicación:

Reemplace todo "/"con un " ":

/
 

Añadir 5 espacios finales:

$
5* 

Reemplace todas las subcadenas de tamaño seis que no comienzan con un espacio "----- ":

\S.{5}
5*- 
Kevin Cruijssen
fuente
¿Se puede usar en \Slugar de [^ ]?
Neil
@Neil Ah, por supuesto. ¡Gracias!
Kevin Cruijssen
1

05AB1E , 25 24 bytes

ð5׫'/ð:DŒ6ùʒнðÊ}'-5×ð«:

Puerto de la respuesta Python 2 de @negativeSeven , ¡así que asegúrate de votarlo!

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

Explicación:

ð5׫                      # Append 5 trailing spaces to the (implicit) input-string
    '/ð:                 '# Replace all "/" with a space
        D                 # Duplicate the string
         Π               # Get all substrings of this
          6ù              # Only leave those of length 6
            ʒ   }         # Filter it further by:
             нðÊ          #  Only keep those which do NOT start with a space
                 '-5×ð«  '# Push a string of 5 "-" appended with a space: "----- "
                       :  # Replace in the initially duplicated string all substrings 
                          # remaining in the list with this "---- "
Kevin Cruijssen
fuente
1

Japt , 23 22 bytes

Un puerto de la solución JS de Arnauld que estoy demasiado cansado para probar completamente. Si no es válido, ¿puede un Diamante eliminar?

+L² £=U´?U:X>M©5)?'-:S

Intentalo

Lanudo
fuente