¡Jimmy necesita un nuevo par de zapatos!


13

Jimmy ha estado ocupado la semana pasada con todas estas plataformas y cuerdas , ¡y el pobre Jimmy ni siquiera tiene piernas o pies para pararse!


¡Tu trabajo es tomar una cuerda que contenga múltiples Jimmys y darles piernas y zapatos!

Obtenga información en forma de una cuerda Jimmy

Jimmy String => /o\ /o\ /o\

que contiene solo /o\y

dale a cada Jimmy en la entrada un par de pies que se ve así:

 /o\
_/ \_

Convierta la cuerda Jimmy de cabeza flotante introducida en Jimmy con una cuerda de pies, así:

// Input

       /o\   /o\          /o\

// Output

       /o\   /o\          /o\
      _/ \_ _/ \_        _/ \_

Si 2 Jimmys están juntos, deben moverse para hacer espacio, Jimmys siempre se moverá hacia la derecha para dejar espacio para otros Jimmys.

// Input

/o\/o\

// Output

 /o\  /o\
_/ \__/ \_

Otros Jimmys que están más lejos no se deben mover a menos que sea necesario

// Input

/o\/o\      /o\

// Output

 /o\  /o\   /o\
_/ \__/ \_ _/ \_

// Input

/o\/o\    /o\

// Output

 /o\  /o\  /o\
_/ \__/ \__/ \_

Se aplican reglas estándar y lagunas,

Este es el código de golf, por lo que puede ganar la respuesta más corta.


Caso de prueba sugerido: /o\<sp>/o\<sp><sp><sp><sp><sp><sp><sp><sp>/o\/o\mi implementación actual falla porque mueve los dos últimos Jimmies hacia la izquierda en lugar de hacia la derecha. Sin embargo, todos sus casos de prueba tienen éxito.
— Kevin Cruijssen

Respuestas:



3

Ruby -p , 77 75 bytes

La regla de "no mover a Jimmy si no es necesario" fue una experiencia difícil de resolver, pero creo que funcionó bastante bien. Más corto que Python bastante (al momento de escribir), al menos.

-2 bytes de recursivo.

r=/(\\ ?|^)(\S+) ?/
gsub(r){"#$1 #$2"}while~r
puts$_
gsub(/ .o. ?/,'_/ \_')

Pruébalo en línea!


¿Podría usar \S+en lugar de \/\S*?
— recursivo

3

PowerShell , 96 bytes

($o=$args-split'/o.'|%{' '*($w=($l+=$_.Length-1)*($l-gt0));$l-=$w+1})-join' /o\ '
$o-join'_/ \_'

Pruébalo en línea!

Desenrollado:

$o=$args-split'/o.'|%{
    $len += $_.Length-1
    $width = $len*($len-gt0)    # len or 0, if len < 0
    ' '*$width
    $len -= $width+1
}
# $o is array of space strings now
$o-join' /o\ '
$o-join'_/ \_'

2

Python 2 , 152 148 140 bytes

o=[-4]
for i,c in enumerate(input()):o+=[max(i,o[-1]+5)]*('/'==c)
for s in' /o\ ','_/ \_':print''.join('%*s'%(b-a,s)for a,b in zip(o,o[1:]))

Pruébalo en línea!


2

Carbón , 28 bytes

 F⌕Aθ/«J∧ι⊖ι¹WKK→P_/ \_M↗/o\

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

 

Imprima un espacio para vencer el margen izquierdo automático de Carbón.

F⌕Aθ/«

Pase sobre todos los brazos izquierdos.

J∧ι⊖ι¹

Salte a la ubicación deseada del pie izquierdo. Tenga en cuenta que el carbón no tiene problemas para dibujar (-1, 1), pero la pregunta no lo permite, por lo que debemos tener cuidado de evitar dibujar en posiciones negativas.

WKK→

Pasar cualquier salida existente.

P_/ \_M↗/o\

Emitir los pies y luego mover para emitir el Jimmy.


2

retina ,40 37 bytes

\+`(^|\S.)(/\S*) ?
$1 $2
 /o. ?
_/ \_

Pruébalo en línea!

Gracias a Value Ink por jugar golf en 3 bytes.


44
¡Disfruta tus zapatos nuevos!
— Quinn

1
Bueno, traté de fingir que estos desafíos no existen por un tiempo. (Sin relación con ese Jimmy.)
— jimmy23013

Creo que la coincidencia de patrón que utilicé en mi respuesta de Ruby (\\ ?|^)(/\S*) ?es más corta que la de su primera línea y debería dar los mismos resultados (probablemente; no conozco Retina en absoluto)
— Value Ink


1

JavaScript (ES6), 107 bytes

s=>` /o\\ 
_/ \\_`.replace(/.*/g,j=>s.split(/.o./).map(s=>s.slice(n,l=s.length,n=n>l?n-l+2:2),n=1).join(j))

Pruébalo en línea!

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.