Encontré esta pregunta en SO y pensé que sería un buen desafío de golf. Asi que aqui esta:
Desafío:
Escriba un programa que lea una secuencia de cadenas de caracteres, una por línea, y genere una lista de todas las posiciones donde cada cadena tiene el mismo carácter.
Entrada y salida:
La entrada consta de una o más líneas de caracteres ASCII imprimibles sin espacios en blanco, cada uno seguido de una nueva línea. Usted puede asumir que todas las líneas de entrada tienen la misma longitud. La nueva línea no debe considerarse parte de la entrada (es decir, no debe salir como un carácter coincidente).
Ejemplo de entrada (descaradamente robado de la pregunta SO):
abcdefg
avcddeg
acbdeeg
Después de leer la entrada, su programa debe imprimir las posiciones de cada columna coincidente y los caracteres que contienen. (Su programa puede, pero no necesariamente, dejar de leer más entradas si puede determinar antes que no hay columnas coincidentes). Se permite cualquier formato de salida razonable; en particular, puede usar indexación basada en 0 o en 1 para las posiciones.
Ejemplo de salida para la entrada anterior (usando indexación basada en 0):
0: a
3: d
6: g
Puntuación:
Este es el código de golf, por lo que gana la respuesta más corta. En caso de empate, se pueden otorgar caracteres fraccionarios de desempate por características adicionales:
- −½ caracteres para manejar correctamente las líneas de entrada de longitud desigual. (La salida no debe contener posiciones más allá del final de la línea de entrada más corta).
- −¼ caracteres para manejar correctamente la entrada que consiste en caracteres Unicode codificados UTF-8 arbitrarios.
Para inspirarte, puedes encontrar algunas soluciones no protegidas en la pregunta SO (ver arriba).
Aclaraciones:
Simplemente concatenar las posiciones y los caracteres, como en
0a3d6g, no cuenta como "salida razonable". Debe proporcionar algún tipo de separador (como un espacio) entre cada elemento de la salida para que pueda analizarse sin ambigüedades.La entrada se proporcionará en la secuencia de entrada estándar (
stdin), o utilizando cualquier mecanismo de entrada de archivo de texto que sea más natural para el idioma que elija. (Si el idioma elegido no tiene un mecanismo natural para la entrada de archivos, haga lo que parezca más cercano en espíritu).La entrada finaliza cuando no hay más datos para leer (es decir, cuando se produce una condición de fin de archivo). Si lo desea, puede requerir que la entrada se termine con una línea en blanco (que luego no debe contar como parte de la entrada, obviamente). Si lo hace, menciónelo en su respuesta para que otros puedan proporcionar información correcta para la prueba.
Cada línea de entrada, incluida la última, termina con un carácter de nueva línea. Su respuesta no debe informar esta nueva línea como una columna coincidente. (Está bien si su solución también puede manejar la entrada donde la última línea no termina en una nueva línea, pero eso no es necesario).