Dada una cadena, inviértela entrelazada. A continuación, le indicamos cómo hacerlo abcdefghi
y abcdefghij
indexado en 0:
- Separe los caracteres en los índices pares de los caracteres en los índices impares:
acegi bdfh
acegi bdfhj - Invierta los caracteres en índices impares:
acegi hfdb
acegi jhfdb - Intercalar en una cadena nuevamente:
ahcfedgbi
ajchefgdib
Reglas
- Debe admitir cadenas de longitud par e impar.
- En cuanto al índice 0, debe invertir los caracteres en los índices impares, ni siquiera.
- 1-index-wise, por supuesto, debe revertir los caracteres en índices pares, no impares.
- La entrada consistirá en ASCII imprimible (puntos de código 32-126), sin líneas nuevas.
- Puede tomar la entrada como una cadena o como una lista de caracteres (NO cadenas de 1 carácter). Por ejemplo
String
/char[]
ochar*
mascotas, peroString[]
/char[][]
ochar**
no lo son.
Casos de prueba
Input
Output
Hello, World!
HdlroW ,olle!
Hello World!
H!llooW rlde
ABCDEFGHIJKLMNOPQRSTUVWXYZ
AZCXEVGTIRKPMNOLQJSHUFWDYB
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
}"{$y&w(u*s,q.o0m2k4i6g8e:c<a>_@]B[DYFWHUJSLQNOPMRKTIVGXEZC\A^?`=b;d9f7h5j3l1n/p-r+t)v'x%z#|!~
P
P
AB
AB
xyz
xyz
Para la cadena vacía, devuelva la cadena vacía en sí.
Respuestas:
Jalea , 7 bytes
Este es un programa completo.
Pruébalo en línea!
Cómo funciona
fuente
MATL , 8 bytes
Pruébalo en línea! O verificar todos los casos de prueba .
Explicación
fuente
2L
es "Push [2,2,1j]", y5M
es "Push [2,2,1j] nuevamente" ... ¡Y algunas personas dicen que los idiomas de golf no son legibles!2L
produce un literal predefinido.5M
es un portapapeles automático que almacena entradas para llamadas a funciones recientes. En realidad, podría ser reemplazado por2L
el mismo número de bytesAlice , 10 bytes
Pruébalo en línea!
La mitad de los bytes de este programa se gastan en formatear correctamente la fuente, los comandos reales son justos
IYRZO
, porque Alice tiene las funciones correctas para esta tarea.Explicación
Como dije, los espejos (
/\
), la nueva línea y@
están allí solo para hacer que la ip se mueva en la dirección correcta y finalice el programa al final. El código real, linealizado, es el siguiente:Muy sencillo, diría.
fuente
Java (OpenJDK 8) ,
108969493 bytesSe guardó 1 byte usando el truco de @ Neil
s[s.length+~i|1]
Pruébalo en línea!
fuente
String f(char[]s)
cons->
.. Y puede guardar un byte, así poniendo laint
inicialización dentro del ciclo for:for(int a=s.length,b=0;b<a;b++)
. Pruébalo en línea.Python 2 , 52 bytes
Pruébalo en línea! o Pruebe todos los casos de prueba
fuente
Octava, 32 bytes
Pruébalo en línea!
fuente
JavaScript (ES6), 48 bytes
fuente
Jalea , 9 bytes
Pruébalo en línea!
-1 byte gracias a Dennis
fuente
¢
conÇ
, no necesita el³
enlace auxiliar.retina ,
1713 bytesPruébalo en línea!
Se corrigió un error gracias a Neil.
Guardado 4 bytes gracias a Kobi.
Selecciona cada letra precedida por un número impar de caracteres y los invierte. Lo hace utilizando el
\G
que coincide con el final del último partido.fuente
$
lugar de#
.\G
en su lugar en el retrospectivo, y puede eliminar el$
:O^`(?<=\G.).
(12 bytes)$
dado que todas las entradas estaban en orden lexicográfico ordenado. He agregado un nuevo caso de prueba en el que su código podría fallar.PHP> = 7.1, 58 bytes
Versión en línea
fuente
APL (Dyalog) , 9 bytes
Requiere
⎕IO←0
(predeterminado en muchos sistemas) para la definición adecuada de pares e impares.Pruébalo en línea!
⌽
marcha atrás@
en los elementos filtrados por el resultado de la máscara al aplicar el{
función anónima2|
el mod-2 de⍳
los índices de≢
la cuenta (longitud) de⍵
el argumento}
en el argumentofuente
Röda , 34 bytes
Pruébalo en línea!
Explicación
Aquí hay una solución alternativa en el mismo bytecount
3634 bytesEsta es una función anónima que toma la entrada como una cadena de la secuencia de entrada.
fuente
Python 2 , 67 bytes
Pruébalo en línea!
fuente
OCaml , 70 bytes
Pruébalo en línea!
fuente
Haskell , 63 bytes
Pruébalo en línea! Uso:
f "some string"
.Para cadenas impares como
abcdefghi
, la funciónf
pasa la cadena y su inversión a la función!
, que alterna tomando caracteres de ambas cadenas. Para cadenas pares, esto no funciona, y primero debemos agregar un carácter ficticio para obtener el desplazamiento correcto.fuente
C, 69 bytes
Bastante simple. Camina la cadena, imprimiendo el carácter actual o el opuesto.
Ungolfed y explicó:
fuente
Mathematica, 82 bytes
fuente
Japt ,
1413 bytes12 bytes de código, +1 para la
-P
bandera.Guardado 1 byte gracias a @Shaggy
Explicación:
Pruébalo en línea!
fuente
ë2,1
es bastante feo. Creo que puedes haceró o
, quizás ...Åë
también funciona.Japt , 8 bytes
Pruébalo
fuente
K (oK) , 18 bytes
Solución:
Pruébalo en línea!
Ejemplos:
Explicación:
Interpretado principalmente de derecha a izquierda, encuentre los caracteres de índices impares, inviértalos y vuelva a colocarlos en la cadena
fuente
J 26 bytes
sin golf
explicación
(0 1$~#)]`(|.@])/.]
Use la tecla/.
para dividir la entrada en los grupos pares / impares:(0 1$~#)
crea la definición del grupo, repitiendo 0 y 1 cíclicamente a la longitud de la entrada. Nosotros usamos la forma de gerundio de Key por su verbo principal]`(|.@])
, que se aplica a la identidad del primer grupo y el segundo grupo se invierte:(|.@])
.,@,./
Pruébalo en línea!
fuente
(\:2|#\)({~/:)#\<.#\.
y 19 bytes con[:,@,./]]
| ./. ~ 2 | # `[:,@,./]]`|./.~2|#\
, las garrapatas se analizaron0,@|:]]`|./.~2|#\
Python 3,
9387 bytesfuente
reversed(s[1::2])
cons[1::2][::-1]
para guardar 4 bytesf=lambda s,j="".join:j(j(t)for t in zip(s[::2],s[1::2][::-1]))+("",s[-1])[len(s)%2]
Perl 6 ,
63 5855 bytesPruébalo
Pruébalo
Pruébalo
Tuve que usar en
roundrobin
lugar dezip
, porque sezip
detiene tan pronto como una de las listas de entrada se agota.fuente
Mathematica, 62 bytes
toma como entrada una cadena
Pruébalo en línea!
fuente
APL (Dyalog) , 24 bytes
Bytes golfed gracias a @ Adám
Pruébalo en línea!
fuente
GNU APL 1.2, 24 bytes
APL funciona de derecha a izquierda.
⍴R←⍞
asigna la entrada del usuarioR
y luego evalúa su longitud. Reduce a la mitad esto multiplicando por.5
y aplica la⌊
función de piso.⍳
devuelve todos los números del 1 al argumento.APL opera en matrices, por lo que
2×
la matriz que acabamos de obtener⍳
duplica cada elemento, dándonos solo los índices pares (1 indexado, por lo que se basa en⎕IO
ser 1).Al acceder a múltiples índices de un vector, APL proporciona los elementos en esos índices en un vector.
R[X←2×⍳⌊.5×⍴R←⍞]
da solo los elementos indexados pares.⌽
invierte los elementos. Luego, asigne los valores invertidos nuevamente a los índices pares (asignando estos índices aX
guardar 6 bytes).◊
es el separador de enunciados. Una vez realizada la inversión, evalúeR
para imprimir el resultado.fuente
Perl 5, 46 + 3 para el indicador -F = 49 bytes
Utiliza la
-F
bandera para dividir automáticamente la entrada en una matriz de caracteres,@F
. Recorre la matriz y genera ese elemento para un índice par o ese índice (más uno para una cadena de longitud impar) desde el final para una entrada impar.Toma entrada con una nueva línea final. Sin la nueva línea final, solo puede cambiar el pre-incremento en
$x
a un incremento posterior.Un poco más legible:
fuente
05AB1E , 21 bytes
Pruébalo en línea!
Supongo que la razón por la que esto no se hizo en 05AB1E todavía es porque es asqueroso ...
Otra vez, el elemento
zip
auto-drop-last-last de la función duele en lugar de ayudar.PD: si tiene sugerencias de mejora en mi respuesta, publique la suya; Es probable que sea una mejora suficiente para garantizar que obtenga los puntos. Estoy bastante avergonzado de esta respuesta.
fuente
q / kdb +,
70564738352927 bytesSolución:
Ejemplo:
Explicación:
Encuentre los índices impares de la cadena, invierta esta lista, extraiga elementos en estos puntos y luego reasigne en su lugar a la cadena original.
Ediciones:
-9 bytes; cambiar
count
por(#:)
,til
para(!)
,where
para(&:)
yreverse
para(|:)
.-3 bytes; cambiar
(#:)
por(#)
,(&:)
por(&)
y(|:)
para(|)
-6 bytes; reescritura completa
-2 bytes; usando la asignación en lugar de aplicar
fuente
05AB1E , 12 bytes
Pruébalo en línea!
fuente