Листи, рухайся! Pt. 2


14

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

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

Приклади:

"жирафа"

  • 'g' - це 7-а літера в алфавіті, це вже 7-а літера ззаду, тому залиште її.
  • 'я' - це 9-а буква, оскільки 9 більша за довжину слова, вона переходить на передню частину, тому рядок стає igraffe
  • 'r' - це 18-а літера, як-от 'i' - вона переходить на фронт: rigaffe
  • 'a' - це перша літера, вона йде до самого кінця: rigffea
  • 'f' - це 6-я літера, вона стає 6-ю ззаду: rfigfea
  • наступний 'f' - це також 6-й лист, тому він також йде до 6-го ззаду: rffigea
  • 'е' - це п'ята літера, вона йде до 5-ї ззаду: rfefiga

"квітка"

  • 'f' (6) => flower
  • 'l' (12) => lfower
  • 'o' (15) => olfwer
  • 'w' (23) => wolfer
  • 'е' (5) => weolfr
  • 'r' (18) => rweolf

"ананас"

  • 'p' (16) => pineapple
  • 'i' (9) => ipneapple
  • 'n' (14) => nipeapple
  • 'е' (5) => nipaepple
  • 'a' (1) => nipepplea
  • 'p' (16) => pnipeplea
  • 'p' (16) => ppnipelea
  • 'l' (12) => lppnipeea
  • 'e' (5) => lppneipea(переконайтеся, що ви перемістили е, яке вже не переміщено! Тут це не має значення, але внизу це робиться.)

Дякуємо @Neil за те, що покращив тестові приклади з цими 3 доповненнями:

"піца"

  • 'p' (16) => pizza
  • 'i' (9) => ipzza
  • 'z' (26) => zipza
  • 'z' (26) => zzipa(переміщення другого z!)
  • 'a' (1) => zzipa

"абракадабра"

  • 'a' (1) => bracadabraa
  • 'b' (2) => racadabraba
  • 'r' (18) => racadabraba
  • 'a' (1) => rcadabrabaa
  • 'c' (3) => radabrabcaa
  • 'a' (1) => rdabrabcaaa
  • 'd' (4) => rabrabcdaaa
  • 'a' (1) => rbrabcdaaaa
  • 'b' (2) => rrabcdaaaba
  • 'r' (18) => rrabcdaaaba
  • 'a' (1) => rrbcdaaabaa

"символи"

  • 'c' (3) => haractecrs
  • 'h' (8) => arhactecrs
  • 'a' (1) => rhactecrsa
  • 'r' (18) => rhactecrsa
  • 'a' (1) => rhctecrsaa
  • 'c' (3) => rhtecrscaa
  • 't' (20) => trhecrscaa
  • 'е' (5) => trhcrescaa
  • 'r' (18) => rtrhcescaa
  • 's' (19) => srtrhcecaa

Відповіді:



4

Python 3, 78 байт.

Збережено 2 байти завдяки orlp.
Збережено 7 байт завдяки DSM.

x=input()
y=[]
for z in x:m=max(len(x)-ord(z)+96,0);y[m:m]=z
print(''.join(y))

Будує слово як список, а потім приєднується до нього.


(q-p,0)[p>q]довше, ніж min(q-p,0).
orlp

Так є, але це не робить те саме. Це завжди поверне 0 або мінус.
Морган Трапп

Вибачте, я мав на увазі max(q-p,0).
orlp

3

Python 2, 86 байт

a=input();k=list(a)
for i in a:k.remove(i);k.insert(ord(i)-97,i)
print"".join(k)[::-1]

Python 3, 88 байт

a=input();k=list(a)
for i in a:k.remove(i);k.insert(ord(i)-97,i)
print("".join(k)[::-1])

Приклади

Пітон 2:

$ python2 test.py
"flower"
rweolf

Пітон 3:

$ python3 test.py
flower
rweolf

3
k.removeвидаляє перший екземпляр, тож це стане невдалим для чогось подібного baa.
Sp3000

2

Javascript ES6, 136 134 131 байт

s=>([...s].map(c=>{s=s.replace(c,'');p=s.length+97-c.charCodeAt();s=s.substr(0,p)+c.toUpperCase()+s.substring(p)}),s.toLowerCase())

Зауважте, що я дуже дбаю, щоб не переміщувати одного і того ж персонажа двічі, інакше pizzaперетворюється на zipzaколи він має бути zzipa. Є також кращий випадок, який стосується того, щоб не видаляти символів передчасно; charactersстає можливо, srtrchaeacабо srtrheccaaякщо ви зробите це неправильно, але так і має бути srtrhcecaa. Ще одне хитре слово, abracadabraдля якого результат rrabaaadcbaбув би невірним; rrbcdaaabaaбуло б правильно.

Редагувати: Поголив два байти за допомогою підрядки, яка автоматично приводить свої аргументи до діапазону 0..length.

Редагувати: Поголив три байти, змінивши першу підрядку на субстрат, як запропонував користувач81665.


Я думаю, ви могли б використовувати substrзамість цього substring.
користувач81655

sliceкраще (я думаю).
Mama Fun Roll

@ ՊՓԼՃՐՊՃՈԲՍԼ Він не може, оскільки передача від'ємних чисел на sliceце порушує.
користувач81655

о, забув про це.
Mama Fun Roll

Так, була невелика помилка з pizzaтестовим випадком, який ви поставили на мою посаду, але я виправив це.
geokavel

1

Піт, 18 17 байт

uXeS,Z-lzhx;HGHzk

Тестовий сюїт .

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


1

𝔼𝕊𝕄𝕚𝕟, 23 символи / 40 байт

ᴉⓜΞăМƲ ïꝈ-ᶛą$,0),0,$;Ξ⨝

Try it here (Firefox only).

Пояснення

ᴉⓜΞăМƲ ïꝈ-ᶛą$,0),0,$;Ξ⨝ // implicit: ï=input, ᴉ=input split into chars, Ξ=empty array, ᶛ=lowercase alphabet
ᴉⓜ                      // map over input chars
   ΞăМƲ ïꝈ-ᶛą$,0),0,$;   // use splice to insert map item into Ξ at requested index
                      Ξ⨝ // join Ξ
                         // implicit output
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.