Jimmy ha bisogno di un nuovo paio di scarpe!


13

La scorsa settimana Jimmy si è occupato di tutte queste piattaforme e corde e il povero Jimmy non ha nemmeno gambe o piedi su cui stare!


Il tuo compito è quello di prendere una stringa contenente più Jimmy e dare loro gambe e scarpe!

Ottieni input sotto forma di Jimmy String

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

contenente solo /o\e

dai a ciascun Jimmy nell'input un paio di piedi che assomiglino a questo:

 /o\
_/ \_

Trasforma la stringa Jimmy a testa flottante immessa in Jimmy con la stringa dei piedi, in questo modo:

// Input

       /o\   /o\          /o\

// Output

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

Se 2 Jimmy sono vicini, devono spostarsi per fare spazio, Jimmys si sposterà sempre verso destra per fare spazio agli altri Jimmy.

// Input

/o\/o\

// Output

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

Gli altri Jimmy più lontani non devono essere spostati se non in caso di necessità

// Input

/o\/o\      /o\

// Output

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

// Input

/o\/o\    /o\

// Output

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

Si applicano regole standard e scappatoie,

Questo è code-golf, quindi può vincere la risposta più breve.


Caso di prova suggerito: la /o\<sp>/o\<sp><sp><sp><sp><sp><sp><sp><sp>/o\/o\mia attuale implementazione fallisce perché sposta gli ultimi due Jimmies verso sinistra anziché a destra. Tuttavia, tutti i casi di test hanno esito positivo.
— Kevin Cruijssen,

Risposte:



3

Rubino -p , 77 75 byte

La regola "Non muovere Jimmy se non necessario" è stata piuttosto una prova ardua per aggirare ma penso che abbia funzionato abbastanza bene. Più breve di Python di un bel po '(al momento della scrittura), almeno.

-2 byte da ricorsivo.

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

Provalo online!


Potresti usare \S+al posto di \/\S*?
— ricorsivo l'

3

PowerShell , 96 byte

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

Provalo online!

srotolato:

$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 byte

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

Provalo online!


2

Carbone , 28 byte

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

Provalo online! Il collegamento è alla versione dettagliata del codice. Spiegazione:

 

Stampa uno spazio per sconfiggere il margine sinistro automatico del carbone.

F⌕Aθ/«

Passa sopra tutte le braccia sinistre.

J∧ι⊖ι¹

Passa alla posizione desiderata del piede sinistro. Nota che il carbone non ha problemi a disegnare (-1, 1), ma la domanda non lo consente, quindi dobbiamo fare attenzione per evitare di disegnare in posizioni negative.

WKK→

Passa oltre qualsiasi output esistente.

P_/ \_M↗/o\

Emetti i piedi e poi muoviti per emettere Jimmy.


2

Retina ,40 37 byte

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

Provalo online!

Grazie a Value Ink per giocare a golf da 3 byte.


4
Goditi le tue nuove scarpe!
— Quinn,

1
Bene, ho cercato di far finta che queste sfide non esistano da un po '. (Nessuna relazione con quella Jimmy.)
— jimmy23013

Credo che la corrispondenza del modello che ho usato nella mia risposta di Ruby (\\ ?|^)(/\S*) ?sia più breve di quella della tua prima riga e dovrebbe dare gli stessi risultati (probabilmente; non conosco affatto Retina)
— Value Ink


1

JavaScript (ES6), 107 byte

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

Provalo online!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.