Jimmy potrzebuje nowej pary butów!

13

Jimmy był zajęty w zeszłym tygodniu tymi wszystkimi platformami i linami , a biedny Jimmy nie ma nawet nóg ani stóp na nogach!


Twoim zadaniem jest wziąć sznur zawierający wiele Jimmys i dać im nogi i buty!

Uzyskaj dane wejściowe w postaci Jimmy String

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

zawierające tylko /o\i

daj każdemu Jimmy'emu na wejściu parę stóp, które wyglądają tak:

 /o\
_/ \_

Przekształć wprowadzony ciąg pływającej głowy Jimmy w Jimmy ze stopą stóp, tak:

// Input

       /o\   /o\          /o\

// Output

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

Jeśli 2 Jimmys są blisko siebie, muszą się przesunąć, aby zrobić miejsce, Jimmys zawsze przesunie się w prawo, aby zrobić miejsce dla innych Jimmys.

// Input

/o\/o\

// Output

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

Inne Jimmys znajdujące się dalej nie mogą być przenoszone, chyba że jest to konieczne

// Input

/o\/o\      /o\

// Output

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

// Input

/o\/o\    /o\

// Output

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

Obowiązują standardowe zasady i luki,

To jest golf golfowy, więc może wygrać najkrótsza odpowiedź.

Quinn
źródło
Sugerowany przypadek testowy: /o\<sp>/o\<sp><sp><sp><sp><sp><sp><sp><sp>/o\/o\moja obecna implementacja kończy się niepowodzeniem, ponieważ przesuwa ostatnie dwa Jimmies w lewo zamiast w prawo. Jednak wszystkie twoje testy wypadły pomyślnie.
Kevin Cruijssen

Odpowiedzi:

3

Python 2 , 131 120 115 114 121 118 bajtów

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)

Wypróbuj online!

4 bajty dzięki na movatica ; 10 bajtów utraconych na naprawę błędu.

Chas Brown
źródło
1
o+=2-len(g)oszczędza bajt
movatica
118 bajtów
movatica
1
@movatica: wystąpił błąd, ale został on skompensowany przez twoje zmiany :).
Chas Brown,
3

Rubinowy -p , 77 75 bajtów

Zasada „nie ruszaj Jimmy'ego, jeśli nie jest potrzebna” była dość trudna do obejrzenia, ale myślę, że zadziałała całkiem dobrze. Przynajmniej krótszy niż Python (przynajmniej w momencie pisania).

-2 bajty z rekurencyjnego.

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

Wypróbuj online!

Wartość tuszu
źródło
Czy możesz użyć \S+zamiast \/\S*?
rekurencyjny
3

PowerShell , 96 bajtów

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

Wypróbuj online!

Rozwinięty:

$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
źródło
2

Python 2 , 152 148 140 bajtów

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

Wypróbuj online!

TFeld
źródło
2

Węgiel drzewny , 28 bajtów

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

Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:

 

Wydrukuj pole, aby pokonać automatyczny lewy margines Charcoala.

F⌕Aθ/«

Zapętlić wszystkie lewe ramiona.

J∧ι⊖ι¹

Przejdź do wybranej lokalizacji lewej stopy. Pamiętaj, że węgiel drzewny nie ma problemu z rysowaniem (-1, 1), ale pytanie na to nie pozwala, dlatego musimy uważać, aby nie rysować w ujemnych pozycjach.

WKK→

Przejdź obok dowolnego istniejącego wyniku.

P_/ \_M↗/o\

Wyjmij stopy, a następnie przejdź do wyjścia Jimmy'ego.

Neil
źródło
2

Siatkówka ,40 37 bajtów

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

Wypróbuj online!

Dzięki Value Ink za grę w golfa z 3 bajtów.

jimmy23013
źródło
4
Ciesz się nowymi butami!
Quinn,
1
Cóż, próbowałem udawać, że te wyzwania nie istnieją przez jakiś czas. (Brak związku z tym Jimmy.)
jimmy23013
Uważam, że wzorzec dopasowania użyty w mojej odpowiedzi Ruby (\\ ?|^)(/\S*) ?jest krótszy niż ten w twojej pierwszej linii i powinien dać te same wyniki (prawdopodobnie; nie znam w ogóle Retiny)
Wartość Ink
2

Stax , 29 28 24 25 bajtów

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

Uruchom i debuguj

W rozwiązaniu 24-bajtowym wystąpił błąd, który w niektórych przypadkach powodował błędy off-by-1.

rekurencyjny
źródło
1

JavaScript (ES6), 107 bajtów

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

Wypróbuj online!

Arnauld
źródło