Debe escribir una función / programa que tome datos a través de los stdin
argumentos de línea de comandos / argumentos de función, mezcle los caracteres en una cadena y luego envíe la cadena final a través de stdout
.
La entrada contendrá primero una cadena (no vacía o null
), un espacio, y luego un número par de números no negativos, todos separados por espacios. Si la entrada se toma a través de argumentos de función, la cadena será uno de los argumentos, mientras que los enteros, que están separados por un espacio, serán el otro. Debe intercambiar los caracteres de la cadena en los índices correspondientes a pares consecutivos de números.
Por ejemplo:
Hello_world! 0 6
debe resultar en
wello_Horld!
Supuestos
- Puede elegir entre indexación basada en 0 y basada en 1, y puede suponer que los índices dados siempre estarán dentro del rango.
- La cadena no tendrá más de 100 caracteres y solo contendrá caracteres ASCII en el rango
!
de~
(códigos de caracteres 0x21 a 0x7E, inclusive). Consulte la tabla ASCII para referencia. - Los dos índices en un par pueden ser idénticos (en cuyo caso, no se intercambia nada en ese paso).
Puntuación
Este es el código de golf, por lo que gana el envío más corto (en bytes).
Casos de prueba
Hello_world! 0 6 => wello_Horld!
First 1 2 1 0 0 4 => tFisr
(Second!$$) 8 7 10 1 => ()econd$!$S
~Third~ 0 0 6 6 0 6 6 0 => ~Third~
Respuestas:
CJam, 11 bytes
Cómo funciona
Este es un enfoque ligeramente diferente, en el que simplemente ejecuto un bucle do-while hasta que me quedan pares de números en la entrada.
Pruébalo en línea aquí
fuente
Python 3,
8986 bytesDescomprime todas las cosas. (3 bytes guardados gracias a @potato)
fuente
[*s],*L=input().split()
luego puede quitar la línea después. Por cierto, me gusta su solución, es casi elegante a pesar de que es muy golfista.CJam, 13 bytes
Pruébalo aquí.
Explicación
fuente
C (137 b)
Se acerca la explicación ...
Argumentos
T = una palabra de tipo char * .
V = una matriz de un número par de elementos enteros.
L = longitud de V
Salida
cadena mixta
Como funciona ? :
barre los números de la matriz V y viceversa, y coloca el enésimo elemento de la cadena después de seguir todo su progreso hasta el punto real. Ejemplo
input = T = "Primero", V = {1,2,1,0,0,4}
V invertido = {4,0,0,1,2,1}
Pruébalo aquí
fuente
int
no es necesario (puede dar lugar a un comportamiento inesperado), y lasint
variables que son parámetros no necesitan unaint
variable, en lugar de declarar en el bucle se puede declarar en un lugar fuera del bucle, usar enputchar
lugar deprintf
etc.Python 3 -
161149Jugó más al cambiar algunas variables y usar
;
como en el comentario de Tim.Esperaba que saliera con aspecto de golf, pero no tanto.
fuente
while
awhile c<len(t):line1;line2;line3...
.c=c+2
va ac+=2
c
en realidad está indexandot
(la entrada) para obtener las posiciones que necesitamos intercambiar. Pero dado quet[0]
es la cadena que necesitamos intercambiar,t[1]
yt[2]
mantener el primer par de intercambios.C,
109107102 bytesNota:
s
ya
debe declararse como matrices globales.s
es la cadena que desea intercambiar ya
es una matrizint
con todos los valores numéricos.Si el código anterior no funciona, intente usarlo en
void f(){...}
lugar def(){...}
Código sin golf:
Pruébalo aquí
fuente
Pitón 3, 135
Explicación:
fuente
C, 70 bytes
Dado que la cadena de entrada tiene una longitud máxima de 100, decidí hacer que el byte 'NULL' que indica el final de la matriz de enteros sea inequívoco
0xFF
. Presumiblemente, esto no cuenta como entrada adicional, aunque por un costo de(como máximo) 73 bytes se puede convertir en una indexación basada en 1 y usar'\0'
como el final de la matriz.Prácticamente solo hace un intercambio regular con una variable tmp y usa que el operador de coma introduce puntos de secuencia para tener un comportamiento definido (a diferencia de algunas manifestaciones de intercambios xor que tendrían un recuento de caracteres más bajo pero conducirían a un comportamiento indefinido).
Editar: según lo solicitado, puede probarlo: http://rextester.com/OVOQ23313 .
fuente
Dart - 123
Asume que la entrada en la línea de comandos se divide automáticamente en espacios. De lo contrario, necesita una inicial
x=x[0].split(' ');
para dividir la cadena en texto e índices.Con más espacios en blanco:
Ejecute / pruebe esto en dartpad.dartlang.org .
fuente
Rebol - 71
Sin golf:
fuente
input
función no podrá llamar a STDIN desde allí. La solución alternativa es establecer de manera simpleinput
el valor que desea probar. Este es un ejemplo completo de la primera pruebainput: "hello_World 1 7" s: take i: split input" "foreach[a b]i[swap at s do a at s do b]print s
y haga clic en Hacer en Rebol 3 NB. Rebol usa indexación basada en 1.C, 143 bytes
El programa anterior toma datos de los argumentos de la línea de comandos, copia la cadena en una matriz, intercambia los caracteres correspondientes y luego genera la cadena modificada.
Código sin golf:
fuente
10
como uno de los índices.JavaScript (ES6), 95
95 bytes con una sola entrada de cadena (función f a continuación)
75 bytes con 2 parámetros, cadena y matriz de números (función g a continuación)
(EcmaScript 6, solo Firefox)
fuente