Исправьте Meeesesessessesseesseessesedsed upp teeexexextext


38

Это вдохновлено мини-гольфом в понедельник № 6: Meeesesessess upp teeexexextext

Задний план

ETHпродукция с трудом вводит текст на своей обычной веб-странице. Всякий раз, когда он использует цифры или буквы, текст будет обсуждаться. Ваша задача - помочь ему набрать текст, чтобы добиться нормального поведения.

Преобразование

Преобразование влияет на серии буквенно-цифровых символов ( [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
Это хорошо определено, но почему нет ответа?
Akangka

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<

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

Объяснение:

Почти забыл написать это: p

Проблема решается в несколько этапов:

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

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