Jimmy a besoin d'une nouvelle paire de chaussures!

13

Jimmy a eu une semaine chargée avec toutes ces plates - formes et cordes , et le pauvre Jimmy n'a même pas de jambes ou de pieds pour se tenir debout!


Votre travail consiste à prendre une chaîne contenant plusieurs Jimmys et à leur donner des jambes et des chaussures!

Obtenez une entrée sous la forme d'une chaîne Jimmy

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

contenant uniquement /o\et

donnez à chaque Jimmy en entrée une paire de pieds qui ressemble à ceci:

 /o\
_/ \_

Transformez la chaîne Jimmy à tête flottante entrée en chaîne Jimmy avec pieds, comme ceci:

// Input

       /o\   /o\          /o\

// Output

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

Si 2 Jimmys sont proches l'un de l'autre, ils doivent se déplacer pour faire de la place, Jimmys se déplacera toujours vers la droite pour faire de la place pour d'autres Jimmys.

// Input

/o\/o\

// Output

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

Les autres Jimmys éloignés ne doivent pas être déplacés sauf si nécessaire

// Input

/o\/o\      /o\

// Output

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

// Input

/o\/o\    /o\

// Output

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

Des règles et des lacunes standard s'appliquent,

C'est le golf de code, alors la réponse la plus courte peut gagner.

Quinn
la source
Cas de test suggéré: /o\<sp>/o\<sp><sp><sp><sp><sp><sp><sp><sp>/o\/o\mon implémentation actuelle échoue car elle déplace les deux derniers Jimmies vers la gauche au lieu de la droite. Tous vos cas de test réussissent cependant.
Kevin Cruijssen

Réponses:

3

Python 2 , 131 120 115 114 121 118 octets

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)

Essayez-le en ligne!

4 octets de thx à movatica ; 10 octets perdus pour correction de bogue.

Chas Brown
la source
1
o+=2-len(g)vous fait économiser un octet
movatica
118 octets
movatica
1
@movatica: il y avait un bug, mais il a été compensé par vos modifications :).
Chas Brown
3

Rubis -p , 77 75 octets

La règle "ne déplacez pas Jimmy si vous n'en avez pas besoin" a été assez difficile à contourner, mais je pense que cela a très bien fonctionné. Plus court que Python de beaucoup (au moment de la rédaction), au moins.

-2 octets de récursif.

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

Essayez-le en ligne!

Encre de valeur
la source
Pourriez-vous utiliser \S+à la place de \/\S*?
récursif
3

PowerShell , 96 octets

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

Essayez-le en ligne!

Déroulé:

$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'_/ \_'
mazzy
la source
2

Python 2 , 152 148 140 octets

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

Essayez-le en ligne!

TFeld
la source
2

Fusain , 28 octets

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

Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:

 

Imprimez un espace pour vaincre la marge gauche automatique de Charcoal.

F⌕Aθ/«

Faites une boucle sur tous les bras gauches.

J∧ι⊖ι¹

Sautez à l'emplacement du pied gauche souhaité. Notez que le charbon de bois n'a aucun problème à dessiner (-1, 1), mais la question ne le permet pas, nous devons donc faire attention à ne pas dessiner à des positions négatives.

WKK→

Déplacez-vous au-delà de toute sortie existante.

P_/ \_M↗/o\

Sortez les pieds puis déplacez-vous pour sortir le Jimmy.

Neil
la source
2

Retina ,40 37 octets

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

Essayez-le en ligne!

Merci à Value Ink d'avoir joué au golf sur 3 octets.

jimmy23013
la source
4
Profitez de vos nouvelles chaussures!
Quinn
1
Eh bien, j'ai essayé de faire comme si ces défis n'existaient pas depuis un moment. (Aucune relation avec ce Jimmy.)
jimmy23013
Je crois que la correspondance de motifs que j'ai utilisée dans ma réponse Ruby (\\ ?|^)(/\S*) ?est plus courte que celle de votre première ligne et devrait donner les mêmes résultats (probablement; je ne connais pas du tout la rétine)
Value Ink
2

Stax , 29 28 24 25 octets

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

Exécuter et déboguer

Il y avait un bogue dans la solution de 24 octets qui a provoqué des erreurs off-by-1 dans certains cas.

récursif
la source
1

JavaScript (ES6), 107 octets

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

Essayez-le en ligne!

Arnauld
la source