Мини-гольф по понедельникам: серия коротких соревнований по коду , публикуемых (надеюсь!) Каждый понедельник.
Правдивая история 1 : На днях я играл на своем планшете, когда у меня появилась идея посетить страницу, которую я обычно использую на своем ПК, для тестирования JavaScript. После загрузки страницы я вошел в эту простую программу:
alert("Hello!")
Затем я продолжил нажимать кнопку «Выполнить» и был удивлен, когда мне сказали, что введенный мною код недействителен. Я еще раз взглянул на текстовое поле и увидел это:
alllelelerlerlertlert("Heeelelellellelloello!")
Wha ??? Это не то, что я вошел! Так что здесь произошло? Чтобы понять это, я ввел две простые строки:
abcdefg
0123456
Это получилось так:
abbbcbcbcdbcdbcdebcdebcdefbcdefbcdefgbcdefg
0112123123412345123456
К настоящему времени я все еще не имел ни малейшего представления о том, что случилось с буквами, но цифры казались проще, поэтому я посмотрел поближе. Как оказалось, веб-страница просто вводила первый символ, а затем повторяла все остальное в строке каждый раз, когда нажимался новый:
0112123123412345123456
0
1
12
123
1234
12345
123456
Но как насчет разделов букв? Подумав минуту, я понял, что это одно и то же, но вместо того, чтобы повторять каждый подраздел один раз, он повторяет это дважды :
abbbcbcbcdbcdbcdebcdebcdefbcdefbcdefgbcdefg
a
bb
bcbc
bcdbcd
bcdebcde
bcdefbcdef
bcdefgbcdefg
Комбинация двух работ с комбинацией этих методов:
abc123z
abbbcbcbc1bc12bc123bc123zbc123z
a
bb
bcbc
bc1
bc12
bc123
bc123zbc123z
Что бы ни вызывало сбой, это, кажется, сбрасывается при пунктуации и пробелах, так abc def
становится abbbcbc deeefef
.
К этому моменту я был настолько погружен в то, чтобы выяснить это и превратить его в интересный вызов, что я забыл, почему я был там в первую очередь. (Однако я понял, как печатать в обычном режиме: нажимая пробел после каждого символа. Довольно утомительно, но ты должен делать то, что должен.)
Вызов
Цель задачи состоит в том, чтобы написать программу или функцию, которая принимает текст, подлежащий обработке, вносит изменения, перечисленные выше, и выводит / возвращает результат.
подробности
- Ввод будет содержать только печатный ASCII, без вкладок или новых строк.
Тест-кейсы
Входы: (по одному на линию)
Mess up text
This is some longer text.
CAPS LOCK && "Punc-tua"+'tion'
under_score_style
CaPs wItHIn loWERs
1337 numb3r5
abcdefghij 0123456789
Code-golf is the best!
Выходы:
Meeesesessess upp teeexexextext
Thhhihihishis iss sooomomomeome looononongongongeongeongeronger teeexexextext.
CAAAPAPAPSAPS LOOOCOCOCKOCK && "Puuunununcunc-tuuuaua"+'tiiioioionion'
unnndndndendendernder_scccococorcorcorecore_stttytytyltyltyletyle
CaaaPaPaPsaPs wIIItItItHItHItHIItHIItHInItHIn loooWoWoWEoWEoWERoWERoWERsoWERs
1333337 nuuumumumbumbumb3umb3rumb3rumb3r5
abbbcbcbcdbcdbcdebcdebcdefbcdefbcdefgbcdefgbcdefghbcdefghbcdefghibcdefghibcdefghijbcdefghij 0112123123412345123456123456712345678123456789
Cooodododeode-gooolololfolf iss thhhehe beeesesestest!
счет
Это код-гольф , поэтому выигрывает самый короткий действительный код в байтах. Tiebreaker переходит к представлению, которое первым достигло конечного числа байтов. Победитель будет выбран в следующий понедельник, 2 ноября. Удачи!
Изменить: И победитель ... @ MartinBüttner, используя Retina для невероятного 43-байтового решения!
1 Да, эта история полностью правдива, и если вам нужно больше разъяснений, см. Сноску 1.
' '.join(x[0]+''.join(2*x[1:i]for i in range(1,len(x)+1)) for x in raw_input().split())