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.

Quinn
fonte
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

Python 2 , 131 120 115 114 121 118 bytes

o=1;W=[]
for g in map(len,input().split('/o\\')):W+=[' '*(g-o)];o=max(o-g,0)+2
for q in' /o\ ','_/ \_':print q.join(W)

Experimente online!

4 bytes thx para movatica ; 10 bytes perdidos para correção de bug.

Chas Brown
fonte
1
o+=2-len(g)economiza um byte
movatica 10/07/19
118 bytes
movatica 10/07/19
1
@movatica: houve um erro, mas foi compensado pelas suas edições :).
Chas Brown
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!

Value Ink
fonte
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'_/ \_'
confuso
fonte
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!

TFeld
fonte
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.

Neil
fonte
2

Retina ,40. 37 bytes

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

Experimente online!

Agradecimentos ao Value Ink por jogar fora 3 bytes.

jimmy23013
fonte
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
2

Stax , 29 28 24 25 bytes

¢▄▌ß╙EVäN»0►,δñï◙,Θ╙BÅhΓ?

Execute e depure

Houve um erro na solução de 24 bytes que causou alguns erros off-by-1 em alguns casos.

recursivo
fonte
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!

Arnauld
fonte