Mini golf de lunes: una serie de desafíos de código corto de golf , publicados (¡con suerte!) Todos los lunes.
Historia real 1 : El otro día, estaba jugando en mi tableta cuando tuve la idea de visitar la página que normalmente uso en mi PC para probar JavaScript. Después de cargar la página, ingresé a este sencillo programa:
alert("Hello!")
Luego procedí a presionar el botón Ejecutar, y me sorprendió cuando me dijo que el código que había ingresado no era válido. Eché un segundo vistazo al cuadro de texto y vi esto:
alllelelerlerlertlert("Heeelelellellelloello!")
Que ??? Eso no es lo que entré! Entonces, ¿qué pasó aquí? Para resolverlo, ingresé dos líneas simples:
abcdefg
0123456
Esto resultó como:
abbbcbcbcdbcdbcdebcdebcdefbcdefbcdefgbcdefg
0112123123412345123456
Por ahora, todavía no tenía idea de lo que sucedió con las letras, pero los números parecían más simples, así que lo miré más de cerca. Al final resultó que, la página web simplemente estaba ingresando el primer carácter, luego repitiendo todo el resto en la cadena cada vez que se presionaba uno nuevo:
0112123123412345123456
0
1
12
123
1234
12345
123456
¿Pero qué pasa con las secciones de letras? Después de reflexionar por un minuto, me di cuenta de que es lo mismo, pero en lugar de repetir cada subsección una vez, la repite dos veces :
abbbcbcbcdbcdbcdebcdebcdefbcdefbcdefgbcdefg
a
bb
bcbc
bcdbcd
bcdebcde
bcdefbcdef
bcdefgbcdefg
Una combinación de los dos funciona con una combinación de estas técnicas:
abc123z
abbbcbcbc1bc12bc123bc123zbc123z
a
bb
bcbc
bc1
bc12
bc123
bc123zbc123z
Cualquiera que sea la falla, esto parece restablecerse en la puntuación y los espacios, por lo que se abc def
convierte abbbcbc deeefef
.
En este punto, estaba tan absorto en resolverlo y convertirlo en un desafío interesante que olvidé por qué había estado allí en primer lugar. (Sin embargo, descubrí cómo escribir normalmente: presionando la barra espaciadora después de cada personaje. Bastante tedioso, pero tienes que hacer lo que tienes que hacer).
Desafío
El objetivo del desafío es escribir un programa o función que tome el texto a procesar, realice los cambios enumerados anteriormente y genere / devuelva el resultado.
Detalles
- La entrada solo contendrá ASCII imprimible, y no habrá pestañas ni líneas nuevas.
Casos de prueba
Entradas: (una por línea)
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!
Salidas:
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!
Puntuación
Esto es código de golf , por lo más corto código válido en bytes victorias. Tiebreaker va a la presentación que alcanzó su conteo final de bytes primero. El ganador será elegido el próximo lunes 2 de noviembre. ¡Buena suerte!
Editar: ¡ Y el ganador es ... @ MartinBüttner usando Retina para una increíble solución de 43 bytes !
1 Sí, esta historia es completamente cierta, y si necesita más aclaraciones, vea la nota al pie 1.
' '.join(x[0]+''.join(2*x[1:i]for i in range(1,len(x)+1)) for x in raw_input().split())