Su tarea es escribir un programa que, dado un número y una cadena, divide la cadena en trozos de ese tamaño y los invierte.
Reglas
Su programa recibirá un número entero positivo n
, así como una cadena s
con una longitud de al menos uno que consta de solo ASCII imprimible (sin incluir espacios en blanco). La cadena se debe dividir en trozos de longitud n
, si la longitud de la cadena no es divisible por n
las sobras al final se debe considerar su propio fragmento. Luego, invierta el orden de los trozos y júntelos nuevamente.
Casos de prueba
n s Output
2 abcdefgh ghefcdab
3 foobarbaz bazbarfoo
3 abcdefgh ghdefabc
2 a a
1 abcdefgh hgfedcba
2 aaaaaa aaaaaa
2 baaaab abaaba
50 abcdefgh abcdefgh
6 abcdefghi ghiabcdef
Este es el código de golf , por lo que debe apuntar a la menor cantidad de bytes posible.
Respuestas:
Jalea , 2 bytes
Un programa completo que imprime el resultado.
Pruébalo en línea!
¿Cómo?
fuente
Python 3 , 35 bytes
Pruébalo en línea!
fuente
and
palabra clave aquí? @Dennis05AB1E ,
5 43 bytes-1 gracias a Dennis
-1 gracias a carusocomputing
Pruébalo en línea!
fuente
¹
no es necesarioJavaScript (ES6), 37 bytes
Toma la entrada al curry: número primero, luego cadena, como
f(2)("abcdefgh")
.Mostrar fragmento de código
fuente
Perl 6 ,
2820 bytesIntentalo
Intentalo
Expandido:
fuente
Bash + coreutils, 22
Pruébalo en línea .
fuente
Haskell , 32 bytes
Pruébalo en línea!
fuente
PHP, 53 bytes
fuente
Röda , 36 bytes
Pruébalo en línea!
Es una función que toma un argumento. Los caracteres de la cadena deben estar en la secuencia.
try
se usa para descartar errores en caso de que lahead
función no pueda leern-1
valores.Explicación:
No tan ofuscado como de costumbre. Creo que es bastante hermoso. :)
fuente
[[try head n]]
funciona en lugar de[[_]..[try head n-1]]
?_
la expresión.[[try head n]]
tomaría n valores una vez , pero[[_]..[try head n-1]]
toma n valores siempre que queden valores.CJam , 5 bytes
La entrada es un número y una cadena entre comillas dobles, separados por espacios en blanco.
Pruébalo en línea! O verificar todos los casos de prueba .
Explicación
fuente
Lote, 74 bytes
Más bien molesto, esto termina siendo recursivo en lugar de recursivo de cola.
fuente
V ,
1310 bytesPruébalo en línea!
En acción:
se convierte en
que se convierte
antes de que se eliminen todas las líneas nuevas
fuente
brainfuck , 78 bytes
El primer byte de la entrada es el tamaño del fragmento, dado por el valor del byte. El resto de los bytes se consideran la cadena.
Pruébalo en línea!
Ampliado y comentado
fuente
PowerShell,
5649 bytes-7 bytes gracias a mazzy
Pruébalo en línea!
fuente
.ps1
e intente llamar a este script en lugar de su código. Si funciona, entonces la prueba fue exitosa.Mathematica, 46 bytes
Función anónima. Toma un número y una cadena como entrada y devuelve una cadena como salida. No hay mucho que ver aqui.
fuente
Javascript -
544746 bytesRehecho:
Usado como
Gracias a @ETHproductions por alguna aceleración de RegEx ¡Gracias a @Shaggy por un byte adicional en la evaluación!
Original:
fuente
eval('/.{1,'+n+'}/g')
s=>n=> ...
eval("/.{1,${n}}/g")
, utilizando comillas invertidas en lugar de comillas.Pyth, 5 bytes
Pruébalo en línea .
Explicación
fuente
Retina , 38 bytes
1 byte guardado gracias a @LeakyNun
(Tenga en cuenta el espacio en la segunda línea y el espacio final)
Este programa toma la entrada como unaria en la primera línea y la cadena en la segunda.
Pruébalo en línea!
¡Banco de pruebas! (ligeramente modificado)
Explicación
El primer paso es anteponer un espacio (será importante más adelante).
Ahora retrocedemos. Esto utiliza los grupos de equilibrio de .NET. Es importante tener en cuenta que los grupos aquí actúan como pilas, por lo que cada partida se empuja esencialmente a la pila. Aquí capturamos cada dígito del número unario en el grupo 2. Ahora, cada vez que se encuentra un carácter en la cadena, aparece una coincidencia del grupo 2. Esto asegura que el número de caracteres no exceda el del número unario.
Y finalmente elimine el número unario y la nueva línea.
fuente
\d
por.
para guardar un byte.^
también es redundante.\d
más. Y gracias por jugar al golf con el caret :)Java,
147138bytesString r(String s,int n){String r="";int l=s.length();for(int i=l/n*n;i>=0;i-=n)if(!(i>=l))r+=(i+n)>=l?s.substring(i):s.substring(i,i+n);return r;}
¡Salvado 9 Bytes gracias a Kevin Cruijssen!
En forma expandida:
Este es mi primer intento de codegolf, así que cualquier comentario es bienvenido.
fuente
int l=s.length();for(int i=l/n*n;
puede serint l=s.length(),i=l/n*n;for(;
así que solo tienesint
una vez. Yif(!(i>=l))
puede serif(l<i)
. Yr+=(i+n)>=l?
puede estar sin el paréntesis:r+=i+n>=l?
. Además, si aún no lo ha visto, le puedo recomendar que consulte los Consejos para jugar golf en Java para obtener algunos consejos geniales para usar. :) Una vez más, bienvenido.Perl 5 , 25 bytes
Utiliza las
-lnM5.010
banderas.Pruébalo en línea!
Grito a Grinnz por contarme sobre
=~ m/.{1,$n}/g
-M5.010
permite el uso de lasay
función, que para nuestros propósitos es imprimir con un nombre más corto.-n
pone la primera línea de entrada$_
y-l
corta la nueva línea final.Luego obtenemos la segunda línea de entrada
<>
y la aplicamos a la expresión regular.{1,$_}
: cualquier carácter, entre 1 y $ _ (la primera entrada) veces. Como esto es codicioso por defecto, siempre trata de hacer coincidir $ _ caracteres. Se1,
necesita para el posible fragmento sobrante al final.El
/g
modificador nos da cada coincidencia de esa expresión regular en la cadena de entrada como una lista, que luego se invierte e imprime. En Perl, pasar una lista parasay
unirse sin ningún delimitador de forma predeterminada.fuente
Dyalog APL Extended ,
1615 bytesPruébalo en línea!
fuente
f←
,/
→∊
∊∘⌽⊢⊂⍨≢⍤⊢⍴1↑⍨⊣
Python, 62 bytes
Pruébalo en línea!
fuente
f=lambda n,s:s and f(n,s[n:])+s[:n]
Apilado , 9 bytes
Pruébalo en línea!
#<
trozos,rev
reveses y''#`
uniones por cadena vacía. Bastante sencillo.fuente
QBIC , 24 bytes
Esto hace un excelente uso de la nueva función de subcadena que agregué recientemente a QBIC:
fuente
Pyth, 4 bytes
Toma entrada como
"s",n
: ¡ Pruébelo usted mismo!fuente
Convexo , 2 bytes
Pruébalo en línea!
fuente
C, 69 bytes
El resultado se imprime en la salida estándar.
fuente
Scala,
5755 bytesGracias Jacob! Probarlo aquí .
Nota: Al usar la forma de símbolo de foldLeft ("/:"), pude despegar un par de bytes más.
fuente
mkString
lugar dereduceLeft
, y elimine 7 bytes:(n:Int,s:String)=>s.grouped(n).toSeq.reverse.mkString("")
Ohm , 5 bytes
Pruébalo en línea!
Explicación
fuente
R ,
6960 bytesPruébalo en línea!
Gracias a Kirill L. por la sugerencia de eliminar
seq
.fuente
:
y alguna manipulación nos permite deshacernos del final-1
.