Reto:
Entrada:
Toma dos entradas:
- Una cadena que solo contiene ASCII imprimible (excluyendo espacios, tabulaciones o nuevas líneas)
- Un carácter ASCII imprimible
Salida:
La primera línea contendrá la entrada de cadena. Cada i
primera aparición de -modulo-3 de este personaje se moverá en dirección sudeste; cada i
segundo -modulo-3 segundo evento se moverá en dirección Sur; y cada i
tercera ocurrencia de -modulo-3 se moverá en dirección suroeste. Continuará hasta que los caracteres estén a punto de volver a su posición inicial inicial (lo que significa que se ajustará de un lado al otro si es necesario), y luego imprimirá la última línea con la entrada de cadena nuevamente para terminarlo (Tenga en cuenta que todos los casos de prueba terminarán en su entrada inicial después de la mayoría de las length(input)
filas, incluida la fila que contiene la entrada posterior. Sin embargo, puede ser antes, como se ve en este primer caso de prueba a continuación, con una longitud de 14, pero terminando después 9.)
Todo esto puede ser bastante vago, así que aquí hay un ejemplo:
Caso de prueba 1:
Entrada de cadena: Entrada de "This_is_a_test"
caracteres:'s'
Salida:
This_is_a_test
s s s
ss s
s s
sss
sss
s s
ss s
s s s
This_is_a_test
Aquí está el mismo caso de prueba con las rutas de colores de los tres s
:
donde el primero 's'
sigue el camino verde en dirección sureste; el segundo 's'
sigue el camino amarillo en dirección sur; y el tercero 's'
sigue el camino azul claro en dirección suroeste. (Si hubiera un cuarto 's'
, iría nuevamente en dirección sudeste, lo que se puede ver en algunos de los otros casos de prueba a continuación).
Reglas de desafío:
- Las entradas solo contendrán ASCII imprimibles (excluyendo espacios, pestañas y nuevas líneas)
- Los formatos de E / S son flexibles. Puede ser una cadena delimitada por una nueva línea, una matriz de caracteres, etc. Su llamada.
- Es posible que el carácter dado no esté presente en la cadena, en cuyo caso se le permite generar la cadena de entrada una o dos veces (es decir,
"test", 'a'
puede tener cualquiera de estos como salida posible:"test\ntest"
/"test"
). - Los espacios iniciales son obligatorios; los espacios finales son opcionales. Se permiten una o varias líneas nuevas iniciales / finales.
Reglas generales:
- Este es el código de golf , por lo que la respuesta más corta en bytes gana.
No permita que los lenguajes de code-golf lo desanimen a publicar respuestas con lenguajes que no sean codegolf. Trate de encontrar una respuesta lo más breve posible para 'cualquier' lenguaje de programación. - Se aplican reglas estándar para su respuesta, por lo que puede usar STDIN / STDOUT, funciones / método con los parámetros adecuados y programas completos de tipo retorno. Tu llamada.
- Las lagunas predeterminadas están prohibidas.
- Si es posible, agregue un enlace con una prueba para su código.
- Además, agregue una explicación si es necesario.
Casos de prueba / más ejemplos:
Caso de prueba 2:
Entrada de cadena: Entrada de "abcabcabcabcabc"
caracteres:'b'
Salida:
abcabcabcabcabc
b b b b b
bbb bb
b b
bbb bb
b b b b b
b b b b
b b b b b
bb b bb
b b b
bb bbb
b b bbb
b b b b
b bb bb
b b bb b
abcabcabcabcabc
Aquí está el mismo caso de prueba con las rutas de colores de los cinco a
:
Caso de prueba 3:
Entrada de cadena: Entrada de "only_two_paths?"
caracteres:'o'
Salida:
only_two_paths?
o o
o o
o o
o o
o o
oo
o
oo
o o
o o
o o
o o
o o
o o
only_two_paths?
Aquí está el mismo caso de prueba con las rutas de colores de los dos o
:
Caso de prueba 4:
Entrada de cadena: "lollollollollol"
Entrada de caracteres:'l'
Salida:
lollollollollol
lll ll ll
ll ll ll
l ll ll ll ll
lll l ll l ll
llllll ll ll
l l ll ll
ll lll ll
l l l lll ll l
ll l ll l l
l l l l llll l
ll lll lll
l l l ll
ll lll lllll
l l l ll l ll
lollollollollol
Aquí está el mismo caso de prueba con las rutas de colores de los diez l
:
Caso de prueba 5:
Entrada de cadena: "AbCdEeDcBaAbCdEeDcBa_CCCCC"
Entrada de caracteres:'C'
Salida:
AbCdEeDcBaAbCdEeDcBa_CCCCC
C C C C C
C C C C CCC
C C C C C C C
C C C C C C C
C C C C C C C
C C C C C C C
C C C C C C C
C C C CC C C
C C CC C C
C C CC C C
C C CC C
CC CC C C
CC CC C C
C C CC C C
C C CC C C C
C C C C C C
C C CC C C C
C C C C C C C
C C C C C C C
C C C C C CC
C C C C C C
C C C C CCC
C C C CCCC
C C C C
C C CCCCC
AbCdEeDcBaAbCdEeDcBa_CCCCC
Aquí está el mismo caso de prueba con las rutas de colores de los siete C
:
Caso de prueba 6:
Entrada de cadena: "XyX"
Entrada de caracteres:'X'
Salida:
XyX
XX
X
XyX
Aquí está el mismo caso de prueba con las rutas de colores de los dos X
:
Caso de prueba 7:
Entrada de cadena: "aaaa"
Entrada de caracteres:'a'
Salida:
aaaa
aa
aaa
aaa
aaaa
Aquí está el mismo caso de prueba con las rutas de colores de los cuatro a
:
length(input)
todo vuelve a coincidir, pero puede ser antes, como lo demuestra el primer caso de prueba. Pero parece que tienes razón sobre el múltiplo de 3 partes (aunque no estoy 100% seguro).Respuestas:
Stax , 24 bytes
Ejecútelo y depúrelo en línea
Esta es la representación ascii del mismo programa.
Obtiene los índices de todos los caracteres, y luego los muta hasta que son iguales a los índices originales. Para cada cambio, genere una cadena con el carácter en esos índices.
fuente
Perl 5 ,
-plF
10110099989796 bytesReemplace el
\0
byte 0 por un literal para obtener 96. Observe que el enlace Pruébelo en línea tiene 97 bytes porque no parece posible ingresar un carácter 0 literal allí.El resaltador de código de golf perl piensa
#
comenzar un comentario. Que ingenuo 😈Pruébalo en línea!
Cómo funciona
$l
es un contador para qué línea después de la primera en la que estamos (sin embargo, cuenta hacia atrás, por ejemplo, -3 para 3 líneas debajo de la cadena superior). Después de imprimir la cadena inicial una vez, repetidamente hace lo siguiente.Busque en la primera cadena las apariciones del carácter objetivo y calcule en qué desplazamiento debe aparecer:
(++$#$l%3*$l-$l+"@-")%@F
cuál es la posición actual más el número de línea (negativo) veces-1, 0, 1
(cíclico). Construya una cadena con tantas veces\0
seguidas por el carácter objetivo yor
eso en un acumulador$$l
(que es un acumulador diferente para cada uno$l
y la razón$l
cuenta hacia atrás en lugar de hacia arriba porque$1
,$2
etc. son de solo lectura). Simularmente se$#$l
refiere a una matriz diferente cada vez a través del ciclo. El resultado es la$l
línea th pero con en\0
lugar de espacios.Los caracteres de destino en la primera cadena se sustituyen por
\0
lo que termina con la cadena original con "agujeros" (con\0
) en las posiciones originales del personaje de destino. Sixor
con el acumulador, los agujeros se llenan si y solo si el acumulador tiene los caracteres de destino en las posiciones originales, entonces el resultado será la cadena original. Eso se usa para terminar el ciclo. Si el bucle aún no ha terminado, imprima el acumulador\0
reemplazado por espacio.Cuando el ciclo finaliza, la
-p
opción imprime una vez más la primera cadena y el programa termina .El personaje objetivo se recoge de una manera bastante complicada. Los
${\<>}
convierte una línea de lectura de STDIN a una referencia que a continuación se elimina la referencia y sustituido en la expresión regular inmediatamente. El\Q
prefijo escapa a todos los caracteres que son especiales en una expresión regular (como.
y*
). El\E
es implícito. Elo
modificador hace que la parte de búsqueda nunca se evalúe nuevamente, sino que se repita en todas las coincidencias posteriores (lo cual es bueno ya que ya no hay nada en STDIN).fuente
Python 2 ,
199193191 bytesPruébalo en línea!
Si el bucle puede salir por excepción:
Python 2 , 187 bytes
Pruébalo en línea!
fuente
(j[i]-i%3+1)%l
dos bytes.C (gcc) , 261 bytes
Pruébalo en línea!
fuente
JavaScript (Node.js) ,
197194 bytesPruébalo en línea!
Toma entradas en la sintaxis de curry, es decir
f(s)(c)
.No es perfecto en absoluto, pero necesito JS. Muchas funciones en función.
fuente
Rubí ,
189 176 171 156 150 146 144137 bytesPruébalo en línea!
fuente
Jalea , 33 bytes
Pruébalo en línea!
Llamada como una función. (enlace diádico)
Encontré algunas alternativas de 33 bytes , pero ninguna mejora real.
fuente