Джиммі потрібна ваша допомога!


17

Здається, як і нещодавно, Джимміс загинув дуже багато, як видно тут , і тут, де вас попросили визначити, чи впаде Джиммі. Настав час зупинити це безумство і спробувати врятувати Джиммі.

Джиммі має три частини тіла / , oі \розташовані , як це

/o\

Платформи представлені с -. Джиммі впаде зі своєї платформи, якщо у них дві або більше частин кузова, які не знаходяться безпосередньо над платформою.

Деякі приклади:

   /o\
- -------

Джиммі врівноважить, оскільки всі їх частини тіла вище а - .

   /o\
    ------   ---

Джиммі буде врівноважений, оскільки дві частини тіла вище - s.

 /o\
-- ----  --

Джиммі врівноважить, хоча вони розділені між двома платформами

  /o\
   -

Джиммі не врівноважує, оскільки дві частини кузова не знаходяться вище платформи.


Оскільки мій запас платформи закінчується, у мене є тільки платформи довжиною 5, і важливо, щоб ми використовували якомога менше.

Ваше завдання - взяти на себе вхід Jimmys і вивести рядок платформ, який збереже всі Jimmys на вході. Ваш вихід повинен використовувати якомога менше платформ, але кожна платформа повинна бути 5- шириною 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 будуть збережені за допомогою найменших платформ, позиція не має значення, тому для кожного входу буде кілька дійсних виходів. Немає умови, скільки буде Джимміс у вході, порожній рядок був би дійсним входом.
Квін

3
Тестовий випадок 4 виглядає як страшне обличчя
Термін дії минув

2
Наступні дії: розмістіть якомога більше Jimmys на платформах таким чином, щоб вони не падали.
Вал каже

2
@val, що насправді є одним із пов’язаних питань - я пішов після цього: P
Квін

7
Я можу побачити стільки спостережень Джиммі в майбутньому.
connectyourcharger

Відповіді:


2

Деревне вугілля , 17 15 байт

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

Спробуйте в Інтернеті! Посилання на багатослівну версію коду. Пояснення:

W‹ⅈLθ«

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

×⁵№o\§θⅈ

Якщо символом у цій позиції на вході є oабо \потім надрукувати 5- с.

Перехід до наступного символу, гарантуючи таким чином принаймні один простір між платформами.

Попереднє 17-байтове рішення - ІМХО більше "Вугілля-у".

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

Спробуйте в Інтернеті! Посилання на багатослівну версію коду. Вихід включає вхід, таким чином демонструючи правильність рішення. Пояснення:

θ⸿

Роздрукуйте вхід та перейдіть до початку наступного рядка.

Fθ«

Переведіть петлю на кожен символ введення, щоб не втратити жодного Джиммі.

×⁵¬№ /⊟KD²↑

Подивіться на символ над курсором. Якщо його немає, або якщо він простір або /, тоді нічого не робіть, інакше надрукуйте 5 -с.

Перехід до наступного символу, гарантуючи таким чином принаймні один простір між платформами.


7

Python 2 , 70 67 байт

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

Спробуйте в Інтернеті!

-3 байти завдяки Kevin Cruijssen & Neil

Не найкрасивіший, не впевнений, як краще впоратися з цими залишками ...

На жаль, ми не можемо замінити обидва кінці кожної платформи пробілами за допомогою єдиного re.sub виклик, оскільки у випадку, коли 2 платформи мають один простір один від одного, проміжок між ними не може бути виконаний більше одного разу. Шукання / погляд за твердженням не допоможе, тому що все, що відповідає цим твердженням, не замінюється.

Використання одиничного re.sub посилання:

Python 3.8 (передвипуск) , 78 байт

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

Спробуйте в Інтернеті!


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

@ Пропонований Нілом гольф на мою відповідь Retina також працює для вас: 67 байт .
Kevin Cruijssen


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

@Quinn Shoot. Помилка, не змагаючись, поки я не виправлю це.
connectyourcharger

@connectyourcharger "неконкурентоспроможний" не підтверджує недійсне рішення. Я рекомендую видалити його, якщо ви не збираєтеся його виправляти протягом певного часу (наприклад, наступні кілька хвилин).
Erik the Outgolfer

@Quinn я це виправив.
connectyourcharger

@connectyourcharger Приємно!
Квінн

2

Сітківка , 23 21 байт

/

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

-2 байти завдяки @Neil .

Містить один пробіл у другому, четвертому та шостому рядках.

Порт відповіді @negativeSeven 's Python 2 , тому обов'язково підтримайте його!

Спробуйте в Інтернеті.

Пояснення:

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

/
 

Додайте 5 пробілів:

$
5* 

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

\S.{5}
5*- 

Ви можете використовувати \Sзамість [^ ]?
Ніл

@Neil Ах, звичайно. Спасибі!
Kevin Cruijssen


1

05AB1E , 25 24 байти

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

Порт відповіді Python 2 @negativeSeven , тому обов'язково підтримайте його!

Спробуйте в Інтернеті або перевірте всі тестові випадки .

Пояснення:

ð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 байт

Порт рішення АР Арнольда, який я занадто виснажений, щоб повністю перевірити. Якщо Diamond може видалити, будь ласка, видалити?

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

Спробуй це

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.