Джимми нужна твоя помощь!


17

Похоже, что в последнее время было много Джимми, погибших после их смерти, как можно увидеть здесь , и здесь, где вас попросили определить, упадет ли Джимми. Настало время положить конец этому безумию и попытаться спасти Джимми.

Джимми имеет три части тела /, 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\
     -----

Стандартные правила применяются.

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


2
@Veskah, пока все Jimmys сохраняются с использованием как можно меньшего количества платформ, положение не имеет значения, поэтому для каждого входа будет несколько действительных выходов. Нет никаких условий относительно того, сколько Jimmys будет во входных данных, пустая строка будет допустимым входным.
Куинн

3
Контрольный пример 4 выглядит как страшное лицо
данные

2
Продолжение: поместите как можно больше Jimmys на платформы таким образом, чтобы они не упали.
Вэл говорит восстановить Монику

2
@val, это на самом деле один из связанных вопросов - я следил за ним: P
Куинн

7
Я могу видеть так много продолжений Джимми в будущем.
connectyourcharger

Ответы:


2

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

W‹ⅈLθ«×⁵№o\§θⅈ→

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

W‹ⅈLθ«

Повторите, пока позиция курсора меньше длины ввода.

×⁵№o\§θⅈ

Если символ в этой позиции на входе является oили, \то выведите 5 -с.

Перейти к следующему символу, таким образом гарантируя, по крайней мере, один пробел между платформами.

Предыдущее 17-байтовое решение ИМХО больше "Charcoal-y".

θ⸿Fθ«×⁵¬№ /⊟KD²↑→

Попробуйте онлайн! Ссылка на подробную версию кода. Вывод включает в себя ввод, таким образом демонстрируя правильность решения. Объяснение:

θ⸿

Распечатайте ввод и перейдите к началу следующей строки.

Fθ«

Зацикливайтесь на каждом символе ввода, чтобы не пропустить ни одного Джимми.

×⁵¬№ /⊟KD²↑

Посмотрите на символ над курсором. Если его нет, или если это пробел или /, то ничего не делать, в противном случае выведите 5 -с.

Перейти к следующему символу, таким образом гарантируя, по крайней мере, один пробел между платформами.


7

Python 2 , 70 67 байт

lambda s:S('/',' ',S("\S.{5}","----- ",s+' '*5))
import re;S=re.sub

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

-3 байта благодаря Кевину Круйссену и Нейлу

Не самый красивый, не уверен, как лучше справиться с этими остатками ...

К сожалению, мы не можем заменить оба конца каждой платформы пробелами, используя один re.subвызов, потому что в случае, когда две платформы находятся на расстоянии одного пробела, разрыв между ними не может быть сопоставлен более одного раза. Утверждение предпросмотр / просмотр назад не поможет, потому что все, что соответствует этим утверждениям, не заменяется.

Используя одну re.subссылку:

Python 3.8 (предварительная версия) , 78 байт

lambda s:[s:=re.sub(".[^/ -].{5}"," ----- ",s+"  ",1)for c in s][-1]
import re

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


69 байтов , сначала заменив, /а затем [^ ].
Кевин Круйссен

@ Нил предложил гольф на моем ответе Retina также работает для вас: 67 байт .
Кевин Круйссен


2

Python 3 , 158 164 160 байт

a=input();r=""
for i,c in enumerate(a):
 try: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)

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

Это мой первый ответ по коду, и я рад, что это вопрос Джимми!

Объяснение:

  • 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): Распечатать наш окончательный результат.


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

@ Куинн Стреляй. Э-э-э, не соревнуясь, пока я не исправлю это.
connectyourcharger

@connectyourcharger "non-конкурирующий" не проверяет неверное решение. Я рекомендую удалить это, если вы не собираетесь это исправить в течение некоторого времени (например, следующие несколько минут).
Эрик Outgolfer

@ Куинн Я исправил это сейчас.
connectyourcharger

@connectyourcharger Отлично!
Куинн

2

Сетчатка , 23 21 байт

/

$
5* 
\S.{5}
5*- 

-2 байта благодаря @Neil .

Содержит один пробел во второй, четвертой и шестой строках.

Порт ответа от @negativeSeven на Python 2 , поэтому обязательно проголосуйте за него!

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

Объяснение:

Заменить все "/"на " ":

/
 

Добавить 5 пробелов:

$
5* 

Замените все подстроки размера шесть, которые не начинаются с пробела "----- ":

\S.{5}
5*- 

Вы можете использовать \Sвместо [^ ]?
Нил

@ Нил А, конечно. Благодарность!
Кевин Круйссен,


1

05AB1E , 25 24 байта

ð5׫'/ð:DŒ6ùʒнðÊ}'-5×ð«:

Порт ответа от @negativeSeven на Python 2 , поэтому обязательно проголосуйте за него!

Попробуйте онлайн или проверьте все контрольные примеры .

Объяснение:

ð5׫                      # Append 5 trailing spaces to the (implicit) input-string
    '/ð:                 '# Replace all "/" with a space
        D                 # Duplicate the string
         Œ                # Get all substrings of this
          6ù              # Only leave those of length 6
            ʒ   }         # Filter it further by:
             нðÊ          #  Only keep those which do NOT start with a space
                 '-5×ð«  '# Push a string of 5 "-" appended with a space: "----- "
                       :  # Replace in the initially duplicated string all substrings 
                          # remaining in the list with this "---- "

1

Japt , 23 22 байта

Порт JS-решения Арнаулда, которое я слишком исчерпал, чтобы полностью протестировать. Если это неверно, можно ли удалить Diamond?

+L² £=U´?U:X>M©5)?'-:S

Попытайся

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.