Виправити Meeesesessessesseesesesesessed upp teeexexextext


38

На це надихає понеділок Міні-гольф №6: Meeesesessess upp teeexexextext

Фон

У ETHproductions виникли труднощі з введенням тексту на його звичайну веб-сторінку. Кожен раз, коли він використовує цифри чи літери, текст буде meeesesessesseseesesesesesesessed. Ваше завдання - допомогти йому набрати, щоб досягти нормальної поведінки.

Перетворення

Перетворення впливає на алфавітно-цифрові символи ( [0-9A-Za-z]), обмежені будь-якими символами, що не є цифрами. У наступному прикладі перший рядок буде перетворений на другий (інші рядки показують розбиття перетворення)

An12num:
Annn1n12n12nn12nn12nun12nun12numn12num
A
 nn
   n1
     n12
        n12nn12n
                n12nun12nu
                          n12numn12num

Зокрема, будь-який буквено-цифровий символ після першого в пробігу буде перетворений на весь пробіг поки що, крім першого символу . Крім того, якщо символ є буквою (на відміну від цифри), символ перетвориться на подвійний пробіг.

На щастя, backspace видалить останнього символу, а також скидає початок запуску.

Завдання

Цього разу ваше завдання - не виконати перетворення. Натомість, задавши рядок введення, ви повинні повернути закодований текст, який, якщо його перетворити, призведе до введення. Вихід повинен бути якомога короткішим, де \<char>рахується як один символ.

Текст кодується так:

\                   -> \\
backspace character -> \b
linefeed            -> \n

Ви можете написати програму або функцію, взявши введення через STDIN (або найближчу альтернативу), аргумент командного рядка або аргумент функції та вивівши результат через STDOUT (або найближчу альтернативу), значення повернення функції або параметр функції (out).

Тестові справи

Кожен тестовий випадок - це два рядки, перший - вхідний, другий - вихідний.

Heeeeeelp me. It shouldn't be messed up.
Hee \blp\b me\b. It\b sh\bou\bld\bn't be\b me\bss\bed\b up\b.

alert("Hello, world!");
al\ber\bt("He\bll\bo, wo\brl\bd!");

1223234234523456
123456

6
Це чітко визначено, але чому немає відповіді?
Акангка

1
Я якось пропустив це; приємного віджиму! Можливо, я спробую написати відповідь пізніше.
ETHproductions

Це нагадує мені час, коли мій друг надсилав текст через UDP
TRGWII

1
Я думаю, що ваш остаточний тестовий випадок потребує виправлення. Ви включаєте першого символу ( 1кожного разу) у пробіжки.
Лейф Віллерц

Я, чесно кажучи, не розумію, що я повинен робити ... Вибач. Чи можете ви додати деякі входи та виходи та додати кілька прикладів із поясненням? Вибачте.
Яссін Хаджай

Відповіді:


10

CJam, 207

{_,1>{:E1<_0{:I2$,+E=:C+:R1>C'9>)*+:P,E,<{EP#{L0}{PRI)1}?}{PE#L{R8cP,E,-*+}?0}?}g}&}:U;LqS+'a+{_'[,_el^A,s+&,V={+}{s\V!:V{L{:BU_aL?B,,1>Bf{_2$<U_{_W=8>S8c+*+\@>j+}{?;}?}+{,}$0=}j}|\}?}%s'\8cN++'\"\bn"f+er-2<

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

Пояснення:

Майже забув написати це: с

Проблема вирішується в кілька етапів:

  • текст відокремлюється на проміжки буквено-цифрових символів (назвемо їх словами) та прогони не буквено-цифрових символів (не слова)
  • не-слова друкуються такими, якими вони є, а слова фіксуються
  • виправлення слова робиться рекурсивно (із запам'ятовуванням): розділіть це слово на 2 шматки всіма можливими способами (включаючи порожній 2-й шматок), спробуйте розв'язати перший шматок (див. нижче), зафіксуйте 2-й фрагмент та з'єднайте результати з пробілом -безпечний простір при необхідності; прийняти найкоротший підрозділ
  • відмежування шматка означає пошук мінімальної рядки буквено-цифрових символів, можливо, супроводжуваної деякими задніми просторами (але без зворотних просторів в середині), які, коли переплутані, призводять до заданого відрізка; це робиться за допомогою простого жадібного алгоритму, йдучи зліва направо, будуючи паралельно немеджену рядок та її заплутану версію і визначаючи наступний необхідний символ на кожному кроці; деякі шматки не можна не переплутати

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