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.