Dada una cadena para codificar, y varias columnas (la clave), codifique la cadena de la siguiente manera:
Usaré el ejemplo Hello, world!
y la clave3
Primero, escriba el número de columnas:
1 2 3
Luego, escriba el texto comenzando desde la esquina superior izquierda, un carácter por columna, y cuando se quede sin columnas, pase a la siguiente línea.
1 2 3
H e l
l o ,
w o
r l d
!
Ahora, para obtener su texto codificado, lea el texto comenzando desde la esquina superior izquierda, pero esta vez, primero lea una columna, luego la siguiente, y así sucesivamente. Si no hay un personaje en la ranura, ponga un espacio.
Hl r!eowl l,od
Tenga en cuenta que aquí hay un espacio final.
Este es tu texto codificado.
Otro caso de prueba es Programming Puzzles and Code Golf SE
con clave 5
:
1 2 3 4 5
P r o g r
a m m i n
g P u z
z l e s
a n d C
o d e G
o l f S
E
El texto codificado es PagzaooErm lndl omPedef gius rnz CGS
.
Más casos de prueba
"abcdefghijklmnopqrstuvwxyz", 2 -> "acegikmoqsuwybdfhjlnprtvxz"
"codegolf.stackexchange.com", 4 -> "cg.ccgoooskhemdltea. efaxnc "
"Pen Pineapple Apple Pen!!!", 7 -> "PeAeeapnnpp! pl!Ple!ie n P "
"1,1,2,3,5,8,13,21,34,55,89", 10 -> "18,,,5115,3,2,8,2931 ,, 53 ,4 "
Recuerde, este es el código de golf , por lo que gana el código con la menor cantidad de bytes.
Programming Puzzles and Code Golf
,3
.Respuestas:
MATL , 4 bytes
Pruébalo en línea!
Esto es lo más sencillo posible.
e
es una función integrada que da forma a una matriz en n filas. Entonces leemos en input1 como una cadena, y formamos una matriz con input2 filas:Luego, lo transponemos para obtener esto:
Después de eso, solo llamamos
1e
para remodelarlo en una sola fila y mostrarlo como una cadena.Como puede ver en este programa de ejemplo , la función "remodelar" agrega convenientemente tantos ceros como sea necesario para que la matriz sea un rectángulo perfecto. Cuando se muestra como una cadena, MATL trata los '0 como espacios, por lo que automáticamente llena el número necesario de espacios para que no se trabaje más.
fuente
Jalea , 3 bytes
TryItOnline!
¿Cómo?
fuente
PHP, 85 bytes
PHP, 90 bytes
fuente
Ruby,
786765 bytesVéalo en eval.in: https://eval.in/668412
Sin golf
fuente
Pyth - 5 bytes
Pruébelo en línea aquí .
fuente
Python 2, 46 bytes
La idea es tomar la cadena de entrada, copiarla
n
veces con el primer carácter eliminado, y luego tomar todosn
los caracteres.Veamos, por ejemplo
s="abcdef", n=3
, donde, la longitud es un múltiplo den
:El primer ciclo a través de la cadena toma todos
n
los caracteres del primero. Luego, cada ciclo subsiguiente desplaza un índice a la derecha porque se omite el primer carácter. Para garantizar que la longitud sea un múltiplo den
, la cadena inicial se rellena con espacios.fuente
Japt, 15 bytes
¡Pruébelo en línea!
Japt tiene "todas las subsecciones de longitud N" incorporadas, pero ni "todas las subsecciones que no se superponen" ni "todos los caracteres Nth". De repente, hay un agujero enorme en mi vida ...
Explicación
fuente
Python 2, 58 bytes
Pruébalo en Ideone .
fuente
def f(s,n):t=[*s,' '];del t[print(end=s[::n]):f(''.join(t),n-1):n]
, pero es demasiado largo ...JavaScript (ES6), 84 bytes
Es una solución recursiva.
fuente
R,
9281 bytesPruébalo en R-Fiddle
Esto resultó ser un poco dolor de cabeza porque R recicla automáticamente el vector de entrada cuando las filas o columnas especificadas en la creación de la matriz no son múltiplos de la longitud de la entrada. Por lo tanto, tenemos que rellenar el vector con
-nchar(x)%%n
espacios antes de pasarlo a la función matriz.El último paso es simplemente transponer la matriz e imprimirla.
fuente
l=nchar(x)
? Parece que no estás usando enl
ningún lado. Sinel
embargo, la función es todo un descubrimiento, +1.Perl, 61 bytes
54 bytes de códigos y
-F -pi
banderas.Toma la cadena de entrada sin nueva línea final, y la clave debe colocarse después de la
-i
bandera:fuente
Mathematica,
4340 bytes¡Gracias a las millas por ahorrar tres bytes!
Función sin nombre que toma dos argumentos, una matriz de caracteres y un número entero; Devuelve una serie de caracteres. La mayor parte del trabajo pesado se realiza mediante la
Thread
función, que (en este contexto) intercambia filas y columnas.Partition
necesita ser invocado con un par de argumentos inútiles para que coincida con el quinto argumento" "
.fuente
Thread
lugar deTranspose
Join@@Thread@Partition[##,#2,1," "]&
Ruby, 89 bytes
Puntaje terrible, consejos apreciados.
fuente
size
lugar delength
por un byte.Perl, 87 bytes
Acepta dos argumentos como parámetros y uso:
fuente
Pyth, 40 bytes
Pruébalo aquí
Probablemente el código Pyth más feo de la historia, pero este es mi primer intento en Pyth.
Si alguien tiene consejos para mejorar mi golf, ¡por favor deje un comentario!
fuente
(-len(Z))%Q
, para que pueda reemplazar+Q-*Q/lZQlZ
con%_lZQ
. (Como alternativa, puede reorganizar+Q-*Q/lZQlZ
a+-*/lZQQlZQ
No es más corto, pero.+-*/
Parece fresco;))En realidad , 12 bytes
Las sugerencias de golf son bienvenidas, especialmente si puede encontrar una forma más golfista de rellenar espacios. Pruébalo en línea!
Ungolfing
Otra versión de 12 bytes.
En esta versión, el orden de las entradas se invierte, pero esto se puede cambiar si eso no está permitido. Sugerencias de golf bienvenidas. Pruébalo en línea!
Ungolfing
fuente
Pyke, 10 bytes
Pruébalo aquí!
fuente
C #, 161 bytes
Lo siento mucho.
fuente
GolfSharp , (no competidor) 82 bytes
fuente
Groovy, 90 bytes
Acolche la entrada por el techo del tamaño dividido en
n
trozos.Obtenga la cadena acolchada como una lista de caracteres.
Clasificar en n trozos y transponer.
Resultados en:
fuente
Python 3, 48 bytes
fuente
Powershell, 57 bytes
Script de prueba:
Salida:
fuente
SINCLAIR ZX81 / TIMEX TS-1000/1500 BASIC, 134 bytes BASIC tokenizados
El primer parámetro
A$
es el valor de cadena que desea cifrar, y el segundoA
es el número de columnas a las que desea cifrar. La variableC
se usa para agregar una nueva línea después de losA
caracteres.Las líneas 4 a 6 inclusive imprimen los números de columna en la parte superior del área de la pantalla.
La línea 7 agrega una nueva línea (
"\r\n"
equivalente).Las líneas 8 a 13 imprimirán cada carácter de
A$
.Este programa no requiere una expansión de RAM para funcionar.
fuente
K (oK) , 27 bytes
Solución:
Pruébalo en línea!
Explicación:
fuente
05AB1E (heredado) , 3 bytes
La versión heredada de Python se usa en lugar de la reescritura de Elixir, porque la nueva versión no convierte implícitamente las cadenas en caracteres cuando se usa
zip
, lo que hizo la versión anterior.Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
fuente