Джимми нужна новая пара обуви!

13

Джимми был занят на прошлой неделе всеми этими платформами и веревками , и у бедного Джимми даже нет ног или ступней, чтобы стоять на них!


Ваша задача - взять цепочку, содержащую несколько Jimmys, и дать им ноги и обувь!

Получить вход в виде строки Джимми

Джимми Стринг => /o\ /o\ /o\

содержащий только /o\и

дайте каждому Джимми на входе пару ног, которые выглядят так:

 /o\
_/ \_

Превратите введенную строку Джимми с плавающей головкой в ​​Джимми с цепочкой ног, вот так:

// Input

       /o\   /o\          /o\

// Output

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

Если 2 Jimmys находятся близко друг к другу, они должны переместиться, чтобы освободить место, Jimmys всегда будет двигаться вправо, чтобы освободить место для других Jimmys.

// Input

/o\/o\

// Output

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

Другие Jimmys, которые находятся дальше, не должны быть перемещены без необходимости

// Input

/o\/o\      /o\

// Output

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

// Input

/o\/o\    /o\

// Output

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

Применяются стандартные правила и лазейки,

Это код-гольф, поэтому победит самый короткий ответ.

Quinn
источник
Предлагаемый тестовый пример: /o\<sp>/o\<sp><sp><sp><sp><sp><sp><sp><sp>/o\/o\моя текущая реализация не удалась, потому что она перемещает последние два Jimmies влево, а не вправо. Однако все ваши тесты выполнены успешно.
Кевин Круйссен

Ответы:

3

Python 2 , 131 120 115 114 121 118 байт

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)

Попробуйте онлайн!

4 байта thx для movatica ; 10 байт потеряно для исправления ошибки.

Час Браун
источник
1
o+=2-len(g)экономит байт
Movatica
118 байтов
movatica
1
@movatica: была ошибка, но она была компенсирована вашими правками :).
Час Браун
3

Рубин -p , 77 75 байт

Правило «не двигай Джимми, если не нужно» было довольно тяжелым испытанием, но я думаю, что оно сработало довольно хорошо. Короче, чем Python, на немного (на момент написания), по крайней мере.

-2 байта из рекурсивного.

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

Попробуйте онлайн!

Значение чернил
источник
Не могли бы вы использовать \S+вместо \/\S*?
рекурсивный
3

PowerShell , 96 байт

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

Попробуйте онлайн!

раскатали:

$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
источник
2

Древесный уголь , 28 байт

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

Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:

 

Напечатайте пробел, чтобы победить автоматический левый край Charcoal.

F⌕Aθ/«

Обхватите все левые руки.

J∧ι⊖ι¹

Прыгайте в нужное место левой ноги. Обратите внимание, что уголь не имеет проблем с рисованием (-1, 1), но вопрос не позволяет этого, поэтому мы должны позаботиться о том, чтобы не рисовать в отрицательных позициях.

WKK→

Двигаться мимо любого существующего выхода

P_/ \_M↗/o\

Выведите ноги и затем двигайтесь, чтобы вывести Джимми.

Нил
источник
2

Сетчатка ,40 37 байт

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

Попробуйте онлайн!

Благодаря Value Ink для игры в гольф от 3 байтов.

jimmy23013
источник
4
Наслаждайтесь вашей новой обуви!
Куинн
1
Ну, пытался притвориться, что эти проблемы не существуют какое-то время. (Никакого отношения к этому Джимми.)
jimmy23013
Я считаю, что совпадение с образцом, которое я использовал в своем ответе на Ruby, (\\ ?|^)(/\S*) ?короче, чем в вашей первой строке, и должно давать те же результаты (вероятно; я вообще не знаю Retina)
Value Ink