Dado un entero k y un bloque de texto, o una matriz 2D que las matrices internas pueden tener longitudes desiguales (que se asemeja a un bloque de texto), gire cada carácter o elemento en la columna k arriba o hacia abajo a la siguiente posición eso existe.
Ejemplo
Gire la vigésima columna del siguiente texto (basado en 1):
A line with more than k characters.
A longer line with more than k character.
A short line.
Rotate here: ------v--
This is long enough.
This is not enough.
Wrapping around to the first line.
Salida:
A line with more thtn k characters.
A longer line with aore than k character.
A short line.
Rotate here: ------m--
This is long enoughv
This is not enough.
Wrapping around to .he first line.
Rotando la k -ésima columna de la misma entrada donde 35 < k <42 produciría el texto de entrada sin cambios.
Reglas
- Puede usar texto sin formato, una matriz de líneas, una matriz 2D de caracteres o cualquier formato razonable para representar los datos. También puede usar tipos de datos que no sean caracteres.
- El número de valores posibles del tipo de datos de los elementos debe ser al menos 20 si la longitud de su código depende de ello, de lo contrario, al menos 2. Esto podría ser un subconjunto de los caracteres u otros valores admitidos en el tipo nativo.
- Los espacios y cualquier tipo de valores nulos son solo valores normales, si los permite en la entrada. También puede simplemente excluirlos en el tipo de elemento.
- Cambio de regla: se le permite rellenar las matrices más cortas con un valor predeterminado genérico (como espacios), si prefiere usar matrices de igual longitud para almacenar los datos.
- k podría estar basado en 0 o en 1. Se garantiza que está dentro de la línea más larga de la entrada (lo que implica que la entrada tiene al menos una línea no vacía).
- Puede elegir si gira hacia arriba o hacia abajo.
- Simplemente gire una posición o gire n posiciones donde n es un número entero positivo dado en la entrada.
- El código más corto gana.
fuente
n~¨⍨↓⍉⎕⌽@(≢¨)@⎕⍉↑⎕,¨⍨n←⊂⊂⍬
. Tal vez podría agregar modded↑
↓
en su extensión para ayudar a seguir jugando al golf (pero no estoy exactamente seguro de lo útiles que son).C
yI
se localiza por lo que no contaminan:{~∘I¨⍨↓⍉⎕⌽@(~⊢∊I←⎕INSTANCES⊢∘C)@⎕⍉↑⎕,¨⍨⎕NEW⎕FIX I←C←':Class C' ':EndClass'}
Python 2 ,
11111010999989694 bytesPruébalo en línea!
Toma la entrada como una lista de líneas y una columna de índice 0, y devuelve una lista de cadenas.
La columna se gira hacia arriba 1.
-11 bytes, gracias a Jo King
fuente
Java 8,
107106135107 bytes+29 bytes para una corrección de errores.
0 indexado; gira hacia abajo como el ejemplo.
Entrada como una matriz de caracteres; modifica la matriz de caracteres en lugar de devolver una nueva para guardar bytes.
Pruébalo en línea.
Explicación:
fuente
char p=m[0][k]
: si no es así, ¿no arrojará una excepción? Buen trabajo por cierto. Estás superando mi intento de C # por un amplio margen :)n
ak
. Usualmente uson
para entradas enteras, pero como la pregunta usaint p=0,t;
p
m[i%s][k]=(char)(p<1?t:p)
Zsh ,
94 87 78 7469 bytes-7 bytes cambiando a un ternario aritmético, -9 bytes cambiando el carácter in situ (TIL), -4 bytes ingresando el índice en stdin y las cadenas como argumentos, -5 bytes usando una cadena en lugar de una matriz para almacenar los personajes rotativos.
Old Old Old Old ¡Pruébelo en línea!Estas son las claves para que esta respuesta funcione:
$array[0]
o$string[0]
siempre está vacío$array[n]
o$string[n]
está vacío si n es mayor que la longitud de la matriz / cadenaarray[i]=c
ostring[i]=c
reemplazará el elemento / personaje.$[$#s<i?0:++j]
,j
se no se incrementa si$#s<i
.En la respuesta original de 94 bytes, me encontré con un problema interesante relacionado con el uso
<<<
para imprimir. Tuve que usarecho
para evitarlo:La razón de esto se puede ver aquí:
Aquí las cadenas se ejecutan en subcapas porque se proporcionan como stdin a otro programa. Si no hay un programa dado, se le da implícitamente a
cat
. Puedes ver esto con<<< $_
.<<< $ZSH_SUBSHELL
es similar aecho $ZSH_SUBSHELL | cat
. Como necesitamos aumentarj
, no podemos estar en una subshell.fuente
R , 62 bytes
Pruébalo en línea!
Toma la entrada como una matriz de caracteres rellena con espacio. Rota hacia arriba. Todo gracias a Kirill L. !
R , 74 bytes
Pruébalo en línea!
Esta presentación es anterior a la asignación de líneas rellenadas.
Aliasing
substr
aquí no funcionará porque estamos llamandosubstr
ysubstr<-
en la primera línea.E / S como una lista de líneas sin relleno; Rota hacia arriba.
fuente
L
en el entorno principal. Sin embargo, me alegraré de actualizar al espacio.C # (compilador interactivo de Visual C #) , 82 bytes
Pruébalo en línea!
¡Gracias a @ASCIIOnly por sugerir
foreach
qué condujo a un ahorro de 12 bytes!-8 bytes gracias a @someone!
-1 byte gracias a @EmbodimentofIgnorance!
fuente
foreach
ya que es el orden opuesto :(dynamic
para combinar declaraciones y guardar 2 bytes (¡nunca había visto esto antes!) ¡ Pruébelo en línea!Ruby , 57 bytes
Pruébalo en línea!
Toma la entrada como una matriz de líneas
a
. Gira el texto hacia abajo en la posición basada en 0k
. Regresa modificando la entradaa
.fuente
05AB1E , 21 bytes
Definitivamente se puede jugar más golf ..
0 indexado; entrada y salida como una lista de cadenas.
Gira hacia abajo como en el ejemplo, pero
<
se puede reemplazar con>
para girar hacia arribaPruébelo en línea (el pie de página se une a la lista con nuevas líneas, elimínelo para ver el resultado real de la lista).
Explicación:
fuente
K4 , 41 bytes
Solución:
Explicación:
No estoy seguro si me falta algo ... 0 índice, gira hacia arriba (cambiar el
1
que-1
por abajo girar)fuente
Japt v2.0a0, 18 bytes
Basado en 0 con entrada y salida como una cadena de varias líneas. Rota por 1.
¡Debe haber un método más corto!
Intentalo
fuente
6
, su respuesta omitiría el espacioline with
en la primera línea yRotate here
en la cuarta línea, mientras que la mayoría de las otras respuestas también rotarían ese espacio.Jalea , 16 bytes
Un enlace diádico que acepta una lista de líneas (listas de caracteres que no contienen caracteres de nueva línea) a la izquierda y un número entero a la derecha que devuelve una lista de líneas.
Pruébalo en línea!(el pie de página se divide en líneas nuevas, llama al enlace y se une a las líneas nuevas nuevamente)
¿Cómo?
fuente
perl 5 (
-p
), 75 bytesk está indexado a 0, gira hacia abajo
TIO
fuente
Perl 6 ,
3833 bytesModifica la matriz en su lugar (las reglas no permiten)
Pruébalo en línea!
fuente
JavaScript (Node.js) , 52 bytes
Pruébalo en línea!
-7 bytes gracias a Shaggy!
¡Aún no he visto una respuesta de JavaScript! Puerto de mi respuesta C #.
fuente
Carbón ,
342821 bytesPruébalo en línea! El enlace es a la versión detallada del código. Toma una matriz de cadenas como entrada. 0 indexado. Editar: ahora que
PeekDirection
se ha solucionado, puedo manipularlo directamente. Explicación:Imprime las cadenas de entrada.
Salta a la parte superior de la columna para rotar.
Extraiga las celdas que se han impreso.
Reemplace cada celda impresa con el valor de la celda anterior (cíclicamente). Convenientemente, los valores de las celdas se leen en el momento de la
PeekDirection
llamada, por lo que el hecho de que laMapCommand
llamada escriba nuevos valores en las celdas no importa.fuente
Pip
-rn
, 32 bytes0 indexado, gira hacia abajo. Pruébalo en línea!
Filtra para encontrar los índices de todas las filas que son lo suficientemente largas como para participar en la rotación. Luego recorre esas filas, intercambiando el carácter apropiado en cada fila con una variable temporal
s
. Visitar la primera fila nuevamente al final intercambia el valor ficticio nuevamente.fuente
Jalea , 19 bytes
Pruébalo en línea!
1 indexado. Rota hacia abajo. Un enlace monádico que toma una lista rellena a la derecha de cadenas Jelly (una lista de listas de caracteres) como el primer argumento yk como el segundo. Los espacios están prohibidos en la entrada, excepto como relleno correcto, pero se permiten todos los demás caracteres.
Tal como se implementó en TIO, el pie de página divide una entrada de cadena única en una lista de cadenas y las rellena con la derecha, pero esto es por conveniencia; Según tengo entendido, el resultado de ese paso es entrada permitida para el enlace principal según las reglas.
fuente
GFortran , 199 bytes
-20 más o menos leyendo desde stdin en lugar de un archivo
-14 usando enteros implícitos para
i, k, n
-4 mediante la eliminación de espacios y
::
Requiere que el usuario ingrese
k
yn
en la primera línea, dondek
está la columna para rotar, yn
es el número de filas de texto. Las entradas posteriores son las líneas de texto a rotar. ¡Fue un dolor de escribir! ¡Fortran es tan pedante!fuente
T-SQL, 195 bytes
Pruébelo en línea versión sin golf
fuente