Mini-golfe de segunda-feira: Uma série de desafios curtos de golfe com código , publicados (espero!) Toda segunda-feira.
História verdadeira 1 : Outro dia, eu estava brincando no meu tablet quando tive a ideia de visitar a página que normalmente uso no meu PC para testar o JavaScript. Depois que a página foi carregada, entrei neste programa simples:
alert("Hello!")
Passei a pressionar o botão Executar e fiquei surpreso ao me dizer que o código que eu havia inserido era inválido. Dei uma segunda olhada na caixa de texto e vi o seguinte:
alllelelerlerlertlert("Heeelelellellelloello!")
Wha??? Não foi isso que eu entrei! Então o que aconteceu aqui? Para descobrir, digitei duas linhas simples:
abcdefg
0123456
Isso acabou como:
abbbcbcbcdbcdbcdebcdebcdefbcdefbcdefgbcdefg
0112123123412345123456
Até agora, eu ainda não tinha idéia do que aconteceu com as letras, mas os números pareciam mais simples, então olhei mais de perto. Como se viu, a página da Web estava simplesmente inserindo o primeiro caractere e repetindo todo o resto da string toda vez que um novo era pressionado:
0112123123412345123456
0
1
12
123
1234
12345
123456
Mas e as seções de letras? Depois de refletir por um minuto, percebi que é a mesma coisa, mas em vez de repetir cada subseção uma vez, ela repete duas vezes :
abbbcbcbcdbcdbcdebcdebcdefbcdefbcdefgbcdefg
a
bb
bcbc
bcdbcd
bcdebcde
bcdefbcdef
bcdefgbcdefg
Uma combinação dos dois funciona com uma combinação dessas técnicas:
abc123z
abbbcbcbc1bc12bc123bc123zbc123z
a
bb
bcbc
bc1
bc12
bc123
bc123zbc123z
Qualquer falha que causa isso parece redefinir a pontuação e os espaços, assim abc def
se torna abbbcbc deeefef
.
A essa altura, eu estava tão absorto em descobrir e transformá-lo em um desafio interessante que esqueci por que eu estava lá em primeiro lugar. (Contudo, eu descobri como digitar normalmente: pressionar espaço-atrás após cada caractere. Bastante entediante, mas você precisa fazer o que precisa.)
Desafio
O objetivo do desafio é escrever um programa ou função que inclua o texto a ser processado, faça as alterações listadas acima e produza / retorne o resultado.
Detalhes
- A entrada conterá apenas ASCII imprimível e nenhuma guia ou nova linha.
Casos de teste
Entradas: (uma por linha)
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!
Saídas:
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!
Pontuação
Este é o code-golf , pelo que o código válido mais curto em bytes vence. O desempatador vai para o envio que atingiu sua contagem final de bytes primeiro. O vencedor será escolhido na próxima segunda-feira, 2 de novembro. Boa sorte!
Edit: E o vencedor é ... @ MartinBüttner usando Retina para uma incrível solução de 43 bytes !
1 Sim, essa história é completamente verdadeira e, se você precisar de mais esclarecimentos, consulte a nota de rodapé 1.
' '.join(x[0]+''.join(2*x[1:i]for i in range(1,len(x)+1)) for x in raw_input().split())