Jimmy precisa de um novo par de sapatos!


12

Jimmy teve uma semana movimentada com todas essas plataformas e cordas , e o pobre Jimmy nem sequer tem pernas ou pés para se apoiar!


Seu trabalho é pegar uma corda contendo vários Jimmys e dar-lhes pernas e sapatos!

Obter entrada na forma de uma Jimmy String

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

contendo apenas /o\e

dê a cada Jimmy na entrada um par de pés assim:

 /o\
_/ \_

Transforme a corda Jimmy de cabeça flutuante inserida em Jimmy com pés, da seguinte maneira:

// Input

       /o\   /o\          /o\

// Output

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

Se 2 Jimmys estiverem próximos, eles devem se mover para abrir espaço, Jimmys sempre se moverá para a direita para abrir espaço para outros Jimmys.

// Input

/o\/o\

// Output

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

Outros Jimmys que estão mais distantes não devem ser movidos, a menos que necessário

// Input

/o\/o\      /o\

// Output

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

// Input

/o\/o\    /o\

// Output

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

Aplicam-se regras e brechas padrão,

Isso é código-golfe, então a resposta mais curta pode ganhar.


Caso de teste sugerido:, /o\<sp>/o\<sp><sp><sp><sp><sp><sp><sp><sp>/o\/o\minha implementação atual falha porque move os dois últimos Jimmies para a esquerda em vez de para a direita. Todos os seus casos de teste são bem-sucedidos.
Kevin Cruijssen

Respostas:



3

Ruby -p , 77 75 bytes

A regra "não mexa Jimmy se não for necessário" foi uma provação para contornar, mas acho que funcionou muito bem. Mais curto que o Python, bastante (no momento da escrita), pelo menos.

-2 bytes de recursivo.

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

Experimente online!


Você poderia usar \S+no 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'_/ \_'

Experimente online!

Desenrolado:

$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:]))

Experimente online!


2

Carvão , 28 bytes

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

Experimente online! Link é a versão detalhada do código. Explicação:

 

Imprima um espaço para derrotar a margem esquerda automática do Charcoal.

F⌕Aθ/«

Passe por todos os braços esquerdos.

J∧ι⊖ι¹

Salte para o local desejado do pé esquerdo. Observe que o carvão não tem nenhum problema em desenhar (-1, 1), mas a pergunta não permite isso; portanto, temos que tomar cuidado para evitar desenhar em posições negativas.

WKK→

Mova além de qualquer saída existente.

P_/ \_M↗/o\

Saída os pés e, em seguida, mova para saída do Jimmy.


2

Retina ,40. 37 bytes

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

Experimente online!

Agradecimentos ao Value Ink por jogar fora 3 bytes.


4
Aproveite seus sapatos novos!
Quinn

1
Bem, tentei fingir que esses desafios não existem por um tempo. (Nenhuma relação com que Jimmy.)
jimmy23013

Eu acredito que a correspondência de padrões que eu usei na minha resposta de Ruby (\\ ?|^)(/\S*) ?é mais curto do que o de sua primeira linha e deve dar os mesmos resultados (provavelmente, eu não sei Retina em tudo)
Valor de tinta


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))

Experimente online!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.