Похоже, что в последнее время было много Джимми, погибших после их смерти, как можно увидеть здесь , и здесь, где вас попросили определить, упадет ли Джимми. Настало время положить конец этому безумию и попытаться спасти Джимми.
Джимми имеет три части тела /
, o
и \
расположены , как это
/o\
Платформы представлены с -
. Джимми упадет со своей платформы, если у него есть две или более части тела, которые не находятся прямо над платформой.
Несколько примеров:
/o\
- -------
Джимми будет балансировать, так как все их части тела выше -
.
/o\
------ ---
Джимми будет сбалансирован, так как две части тела выше -
s.
/o\
-- ---- --
Джимми будет балансировать, даже если они разделены между двумя платформами
/o\
-
Джимми не будет сбалансирован, так как две части тела не находятся над платформой.
Поскольку у меня заканчиваются запасы платформ, у меня есть только платформы длиной 5, и важно, чтобы мы использовали как можно меньше.
Ваша задача - взять входные данные Jimmys и вывести строку платформ, которая сохранит все входные данные Jimmys. Ваш вывод должен использовать как можно меньше платформ, но каждая платформа должна иметь -
ширину 5.
Обратите внимание, что правило платформы -
шириной 5 означает, что между ними должна быть пробел. ----------
недопустимо в выходных данных, поскольку будет считаться платформой длиной 10, а не двумя платформами длины 5.
Тестовый кейс
/o\ /o\/o\ // input
----- ----- // output
/o\ /o\
----- -----
/o\ /o\ // same input as above
----- ----- // this is also valid output
/o\ /o\
-----
Стандартные правила применяются.
Это код-гольф, пусть победит самый короткий ответ!
Ответы:
Древесный уголь ,
1715 байтПопробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Повторите, пока позиция курсора меньше длины ввода.
Если символ в этой позиции на входе является
o
или,\
то выведите 5-
с.Перейти к следующему символу, таким образом гарантируя, по крайней мере, один пробел между платформами.
Предыдущее 17-байтовое решение ИМХО больше "Charcoal-y".
Попробуйте онлайн! Ссылка на подробную версию кода. Вывод включает в себя ввод, таким образом демонстрируя правильность решения. Объяснение:
Распечатайте ввод и перейдите к началу следующей строки.
Зацикливайтесь на каждом символе ввода, чтобы не пропустить ни одного Джимми.
Посмотрите на символ над курсором. Если его нет, или если это пробел или
/
, то ничего не делать, в противном случае выведите 5-
с.Перейти к следующему символу, таким образом гарантируя, по крайней мере, один пробел между платформами.
источник
Python 2 ,
7067 байтПопробуйте онлайн!
-3 байта благодаря Кевину Круйссену и Нейлу
Не самый красивый, не уверен, как лучше справиться с этими остатками ...
К сожалению, мы не можем заменить оба конца каждой платформы пробелами, используя один
re.sub
вызов, потому что в случае, когда две платформы находятся на расстоянии одного пробела, разрыв между ними не может быть сопоставлен более одного раза. Утверждение предпросмотр / просмотр назад не поможет, потому что все, что соответствует этим утверждениям, не заменяется.Используя одну
re.sub
ссылку:Python 3.8 (предварительная версия) , 78 байт
Попробуйте онлайн!
источник
/
а затем[^ ]
.JavaScript (ES6),
56 5554 байтаПопробуйте онлайн!
Или 47 байтов, если приемлем возврат массива символов.
источник
Python 3 ,
158164160 байтПопробуйте онлайн!
Это мой первый ответ по коду, и я рад, что это вопрос Джимми!
Объяснение:
a=input();r=""
: Взять на вход и инициализировать новую строкуr
.for i,c in enumerate(a):
: Перечислить по вводу.try:r[i] ... except:
: Посмотреть, еслиr[i]
существует - если нет, обработатьexcept
блок.if c in"/o":
: Проверьте, находится ли текущий символ в первых двух частях тела Джимми.r+=(a[i+5<len(a)and i+5or len(a)-1]=="o"and" "or"")+"----- "
: Если так, добавьте новый сегмент. Добавьте пробел перед нашим новым сегментом, если в пяти символах присутствует еще одна голова Джимми.else:r+=" "
В противном случае просто добавьте пробел.print(r)
: Распечатать наш окончательный результат.источник
Сетчатка ,
2321 байт-2 байта благодаря @Neil .
Содержит один пробел во второй, четвертой и шестой строках.
Порт ответа от @negativeSeven на Python 2 , поэтому обязательно проголосуйте за него!
Попробуйте онлайн.
Объяснение:
Заменить все
"/"
на" "
:Добавить 5 пробелов:
Замените все подстроки размера шесть, которые не начинаются с пробела
"----- "
:источник
\S
вместо[^ ]
?Желе , 35 байт
Попробуйте онлайн!
Монадическая ссылка, которая принимает входные данные в виде строки и возвращает строку Jelly с платформами.
Вдохновляется ответом @ absoluteseven .
источник
05AB1E ,
2524 байтаПорт ответа от @negativeSeven на Python 2 , поэтому обязательно проголосуйте за него!
Попробуйте онлайн или проверьте все контрольные примеры .
Объяснение:
источник
Japt ,
2322 байтаПорт JS-решения Арнаулда, которое я слишком исчерпал, чтобы полностью протестировать. Если это неверно, можно ли удалить Diamond?
Попытайся
источник