Entrada
Un entero no negativo ny una cadena no vacía que scontiene solo caracteres alfanuméricos y guiones bajos _. El primer personaje de sno es _. Los guiones bajos de sse interpretan como espacios en blanco que se pueden rellenar con otros caracteres.
Definimos una secuencia infinita de "cadenas infinitas" de la siguiente manera. La cadena se repite infinitamente muchas veces. Para todos , la cadena se obtiene al llenar sus espacios en blanco con los caracteres de , de modo que el primero de se reemplaza con , el segundo con , y así sucesivamente. Desde la primera carta des1 = s s s...sk > 1sk+1sks1_sks1[0]s1[1]s no es _, cada espacio en blanco se llena eventualmente, y denotamos por la cadena infinita donde cada uno ha sido reemplazado por su valor final.s∞_
Salida
El primero n caracteres de como una cadena.s∞
Ejemplo
Considere las entradas n = 30y s = ab_c_. Tenemos
s1 = ab_c_ab_c_ab_c_ab_c_ab_c_ab_c_ab_c_...
Sustituyendo a los espacios en blanco de , tenemoss1s1
s2 = abacbab_ccab_caabbc_abcc_abacbab_cc...
Nuevamente sustituimos a los espacios en blanco, lo que resulta ens1
s3 = abacbabaccabbcaabbc_abcccabacbab_cc...
Una sustitución más:
s4 = abacbabaccabbcaabbcaabcccabacbabbcc...
De esto ya podemos deducir los primeros 30 caracteres de , que sons∞
abacbabaccabbcaabbcaabcccabacb
Esta es la salida correcta.
Reglas
Puede escribir un programa completo o una función. El conteo de bytes más bajo gana, y las lagunas estándar no se permiten. Fallar en una entrada incorrecta es aceptable.
Casos de prueba
0 "ab__" -> ""
1 "ab__" -> "a"
3 "ab__" -> "aba"
20 "ab" -> "abababababababababab"
20 "ab__" -> "abababababababababab"
20 "ab_" -> "abaabbabaabaabbabbab"
30 "ab_c_" -> "abacbabaccabbcaabbcaabcccabacb"
50 "ab_a_cc" -> "abaabccabaaaccabbacccabcaaccabbaaccabaaaccabcaccca"
50 "abc____" -> "abcabcaabcbcaaabcbcbcabcaaababccbcbabccabcabcaaaba"

Respuestas:
Pyth, 17
La entrada debe darse con la cadena en la primera línea y la longitud en la segunda, en STDIN. Por ejemplo:
Pruébalo aquí.
Explicación:
fuente
APL
2928se usa así:
Explicación:
Tryapl.org
fuente
⍣≡Es una idea ingeniosa. Tal vez debería intentar portar esto a J ...CJam,
262420 bytes4 bytes guardados gracias a Peter.
Pruébalo aquí. Toma la cuerda primero y
nsegundo en STDIN.Puede ejecutar todos los casos de prueba pegándolos en la entrada tal como están (incluya el
-> outputsi lo desea) y utilizando el siguiente arnés de prueba (que invierte el orden del código):Explicación
El resultado se imprime automáticamente al final del programa.
Una nota sobre
[\]: En principio,[recuerda el tamaño actual de la pila y]recoge todo hasta el último tamaño recordado en una matriz. Sin embargo, si el tamaño de la matriz cae por debajo del tamaño recordado en el medio, entonces el inicio de la matriz se ajusta en consecuencia. Ahora puede pensar que intercambiar los dos elementos superiores de la matriz no afecta en absoluto el tamaño de la matriz, sino que en\realidad muestra dos valores y luego los empuja en orden inverso. Esto es lo que empuja el inicio de la matriz hacia abajo en dos. Por lo tanto,[\]es la forma más corta de envolver los dos elementos superiores de la pila en una matriz. A veces, el efecto secundario de recopilarlos en orden inverso es bastante molesto, pero en este caso, es exactamente lo que necesito.fuente
_'_#)gconI*. Funciona para mí en GolfScript.Python 3, 110 bytes
Necesita un poco más de golf, pero aquí hay algo de locura. Lee
nentoncessde STDIN.La parte divertida es que, en la asignación del bucle que copiamos
b, luego comenzamos a aparecerbdurante una comprensión de la lista . Si la tarea fuera al revés, ¡no funcionaría!fuente
k, 30
fuente
Java - 162
174No todos los días puedo usar un bucle do / while al jugar golf en Java: D
Esto solo se repite y completa los espacios en blanco a medida que aparecen. Simplemente continúa hasta que no haya más
_en el resultado.Con saltos de línea:
fuente
Java 8, 238
Menos golfizado:
fuente
Rubí, 60
Concatena
sa si mismonveces, luego generancopias de código que reemplaza los guiones bajos cons, evalúa esas copias y devuelve los primerosncaracteres del resultado. Como se elimina al menos un guión bajo en cada bucle, se garantiza que nos daráncaracteres sin guión bajo.fuente
fy correrputs f[10,"ab_"], me sale el siguiente error:in 'eval': undefined method 'next' for #<Array:.... Sin embargo, parece funcionar cuando no hay guiones bajos en la cadena.String#charscambió entre Ruby 1.9.3 y Ruby 2.0; en Ruby 1 devuelve un enumerador cuando no hay bloque, en Ruby 2 una matriz. Puede hacerse insensible a la versión cambiandocharsaeach_char, a costa de 4 bytes netos más de código.Pitón 2, 75
Esto espera una entrada como
(30,"ab_c_").En Python, las cadenas no permiten la asignación. Por lo tanto, reemplazar los espacios en blanco con el carácter deseado es difícil. Uno puede evitar esto convirtiendo a una lista y viceversa, pero me pareció más corto simplemente generar la cadena de salida desde cero, agregando los caracteres deseados uno a la vez.
La salida que se está construyendo es
S, que comienza vacía. Recorremos los caracteres de la entradascopiados muchas veces para simular un círculo. Verificamos si está en blanco a través del booleanob. Verificamos la igualdadx=='_'lugar de la comparación porque el guión bajo se encuentra entre mayúsculas y minúsculas.Si el personaje no está en blanco, simplemente lo agregamos
S. Si está en blanco, agregamos la siguiente letra no utilizada de la salida hasta ahoraS. Rastreamos letras usadas por un puntero índicecque comienza en 0 y se incrementa cada vez que encontramos un espacio en blanco.Al final, imprimimos los primeros
ncaracteres de la cadena resultante.S.Tenemos que usar
S[c:c+b]en lugar del más cortob*S[c]porque este último da un error fuera de los límites cuandoScomienza vacío yces 0. Nunca importa porque estamos garantizados que el primer caráctersno está en blanco, por lo que estoS[c]nunca es necesario, pero el código no lo sabe. Cambiaroral cortocircuito también podría resolver esto, pero cuesta más personajes.Pitón 2, 83
Un puerto Pyth-to-Python de la solución de isaacg , que usa
splityziprealiza el reemplazo:Resultó más largo porque, sorpresa, los métodos con nombre son largos en Python. Pero tal vez se pueda mejorar revolviendo
sys.split('_')juntos de una manera más corta.fuente
Haskell
(93)67No he escrito ningún Haskell en mucho tiempo,
por lo que esto puede acortarse mucho.¡pero fue tan bueno que tuvimos que acortarlo y mejorarlo!Uso:
fuente
Lote - 425
¿Pierdo?
El lote tiene limitaciones, acepto esto. Por ejemplo; Tuve que usar un bucle for para obtener una sola variable en un formato utilizable debido a las limitaciones de la sintaxis de análisis de variables.
for %%b in (!c!)do...simplemente existe para que pueda usar en%%blugar de!c!para poder hacer la manipulación de la cadena!s:~%%b,1!y hacer que las variables se expandan en el momento correcto.Hay un par de cosas bastante básicas que podría hacer para seguir jugando al golf, pero probablemente no por debajo de los 400 bytes. Tendré otra grieta pronto.
fuente
ECMAScript 6, 78
Comienza con una cadena vacía y para cada aparición de guión bajo, lo reemplaza con el carácter en el siguiente índice de la cadena actual.
fuente
Python 2 -
9997 bytesDebido a que 4 presentaciones basadas en python no son suficientes ...
Ejemplo:
fuente
ECMAScript 6,
9391Afeitado 2 personajes de la primera versión.
fuente
C # - 162
Robé la solución Geobits y la cambié a C #
1 char mejor, para que puedas mejorar Geobits;)
fuente