Dada una matriz de enteros positivos y dos índices válidos distintos, devuelva la matriz con los dos elementos correspondientes a los dos índices intercambiados.
Puede optar por usar 0-indexing o 1-indexing, pero los siguientes casos de prueba serán 0-indexados.
array m n output
[1,2,3,4] 0 1 [2,1,3,4]
[5,8,9] 0 2 [9,8,5]
[11,13,15,3] 1 2 [11,15,13,3]
[11,13,15,3] 2 1 [11,15,13,3]
[11,15,15,3] 2 1 [11,15,15,3]
Este es el código de golf . La respuesta más corta en bytes gana. Se aplican lagunas estándar .
code-golf
array-manipulation
Monja permeable
fuente
fuente
m
yn
debe tomarse como una matriz?Respuestas:
do
/ C ++,535039 bytesPruébalo en línea
Guardado 11 bytes gracias a @Dennis
fuente
Lenguaje de script Operation Flashpoint ,
9895 bytesModifica la matriz directamente.
Explicación:
Llamar con:
Salida:
fuente
JavaScript ES6,
3632 bytes¡Mira, mamá, no hay variable temporal!
Intentalo
Ingrese una lista de elementos separados por comas para
a
y 2 enteros param
&n
.fuente
(a,m,n)=>[a[m],a[n]]=[a[n],a[m]]
? Eso solo generaría los 2 elementos intercambiados sin el resto de la matriz (por ejemplo,[5,8,9],0,2
->[9,5]
).a
al final para darnos la matriz completa y modificada. ¿O me estoy perdiendo por completo lo que intentas decir?Pitón 3 ,
4132 bytes-9 bytes gracias a @notjagan
Pruébalo en línea!
Modifica su argumento, que es un formato de salida válido .
fuente
Jalea , 7 bytes
Pruébalo en línea!
Cómo funciona
fuente
y
y
, pero no pensé en usarlo aquí. Esa es una respuesta bastante inteligente.Jelly
un código Jelly válido?Japt ,
1716 bytesPruébalo en línea!
Guardado un byte gracias a ETHproductions
fuente
MATL ,
76 bytesLos índices están basados en 1.
Pruébalo en línea!
Explicación
Considere insumos
[11 13 15 3]
,[2 3]
.fuente
C # (.NET Core) ,
48 4331 bytesPruébalo en línea!
Intercambia los números en la matriz original, no se utilizan variables temporales. Sin embargo, no puedo tomar el crédito por esta respuesta, ya que ha sido idea de Neil .
fuente
(a,m,n)=>a[m]+=a[n]-(a[n]=a[m])
parece funcionar sin embargo.Lisp común , 42 bytes
-2 bytes gracias a @coredump .
Pruébalo en línea!
Muy sencillo, ya que hay una macro Common Lisp a swap:
rotatef
.fuente
Javascript ES6,
3634 bytesManifestación
Mostrar fragmento de código
fuente
CJam , 4 bytes
Pruébalo en línea!
fuente
Java 8 , 48 bytes
Entrada:
fuente
(a,b,c)->a[b]+=a[c]-(a[c]=a[b])
( 31 bytes )Collections::swap
es de 17 bytes ... al menos suponiendo que esto sea válido para este desafío ...05AB1E , 10 bytes
Pruébalo en línea!
fuente
Octava , 28 bytes
Pruébalo en línea!
Bastante satisfecho con este en realidad :)
Toma entrada en el formulario:
f([1,2,3,4],[1,2])
1 indexado.Explicación:
fuente
Medusa , 7 bytes
Toma una lista y un par de índices. Pruébalo en línea!
Explicación
Jellyfish tiene una función de "modificar elementos en índices"
Z
, que hace exactamente lo que necesitamos. Los dosi
s toman las entradas de STDIN.Z
toma como argumentos la segunda entrada, la función de inversiónR
y la lista. LuegoZ
realiza la modificación ep
imprime el resultado.fuente
R, 38 bytes
Se siente bastante largo, pero no puedo hacerlo mucho más corto. Lamentablemente, requiere el retorno explícito
x
, que requiere{}
alrededor del cuerpo de la función.pryr::f()
no reconoce la necesidad dex
como argumento de función, por lo que no funciona: /.fuente
function(x,i)replace(x,i,rev(i))
que funcionaría, incluso con la sintaxis de pryr.replace(x,i,x[rev(i)])
, de lo contrario, colocarás los índices en lugar de sus valores.E / S de Shenzhen, 735 bytes
23 ¥, 810 de potencia, 48 líneas de código
DESCARGO DE RESPONSABILIDAD: Las matrices tienen terminación 0 en esto. Las matrices son un fastidio para trabajar en Shenzhen I / O de lo contrario.
Realmente hice un nivel de vapor para este juego. Puedes jugarlo aquí.
EDITAR: Aa y me acabo de dar cuenta de que dije que se ordenó la matriz Infierno.
fuente
Swift,
11165 bytes (indexado 0)Swift ya es conocido por ser uno de los peores lenguajes de código de golf, pero aquí hay una función
que utiliza expresiones ternarias:¡Echale un vistazo! - Uso:
t(l:[1,2,3],m:0,n:1)
.fuente
k ( kona ), 13 bytes
Bastante básico, pero funciona. Ex:
fuente
Perl 5 , 32 bytes
-3 bytes gracias a @Dom Hastings !
30 bytes de código +
-pa
banderas.Pruébalo en línea!
Muy sencillo, utilizando cortes de matriz.
fuente
@F[pop@p,@p]=@F[@p=<>];$_="@F"
.Mathematica, 32 bytes
fuente
a[[{##2}]]==a[[{#3,#2}]]
debería estara[[{##2}]]=a[[{#3,#2}]]
(usandoSet
, noEquals
)C, 42 bytes
Modifique la matriz en su lugar con un valor temporal.
C,
6058 bytesUn poco más interesante, sin usar ningún valor temporal ...
C, 49 bytes
Usando XOR
fuente
f(x,i,j,t)int*x;{t=x[i];x[i]=x[j];x[j]=t;}
.^
?#define X(x,y,z)x[y]^=x[z],x[z]^=x[y],x[y]^=x[z]
f(r,m,n){int*a=r;r=a[m];a[m]=a[n];a[n]=r;}
está roto: SIGSEGV.Pyth ,
178 bytesGuardado 9 bytes gracias a Leaky Num.
¡Pruébelo en línea!
Esto está indexado en 0, y los índices se proporcionan como una tupla:
(n, m)
.Explicaciones
fuente
@LQ.rUQE
Mathematica, 20 bytes
Función pura que toma dos argumentos en el siguiente formato 1 indexado (y posiblemente abusivo): el segundo caso de prueba
[5,8,9]; 0 2; [9,8,5]
se llamaría como(los espacios son extraños y solo para el análisis visible).
Permute
es la función incorporada que aplica una permutación a una lista yCycles[{{a,b}}]
representa la permutación que intercambia los elementosa
th yb
th de una lista e ignora el resto.fuente
~
Do?~
es la notación infija de Mathematica para una función binaria:x~f~y
significa lo mismo quef[x,y]
.Código de máquina x86, 10 bytes
Esta es una función escrita en código de máquina x86 de 32 bits que intercambia los valores en los índices especificados en una matriz dada. La matriz se modifica en el lugar y la función no devuelve un valor.
Se utiliza una convención de llamada personalizada, que requiere que los parámetros de la función se pasen en los registros :
EBX
registro.ECX
registro.(Se supone que es un índice válido).
EDX
registro.(Se supone que es un índice válido).
Esto mantiene el tamaño bajo y cumple con todos los requisitos formales, pero significa que la función no se puede llamar fácilmente desde otros idiomas como C. Debería llamarlo desde otro programa en lenguaje ensamblador. (Puedes reescribirlo para usar cualquier registro de entrada, sin afectar el conteo de bytes; no hay nada mágico en los que elegí).
Sin golf:
fuente
R, 34 bytes
fuente
Java 8 + InversoY , 27 bytes
Solo llama a la función de intercambio ... esta es una referencia de método del tipo
Consumer3<List, Integer, Integer>
.Pruébalo en línea! (encabezado y pie de página para repetitivo y copia de la
Consumer3
interfaz)fuente
JavaScript (ES2015),
665749 bytesUn enfoque diferente (por desgracia, más largo) que las respuestas anteriores de JavaScript
Fuente
fuente
(s,h,o,w=s.splice.bind(s))=>w(h,1,...w(o,1,s[h]))
49 bytesawk, 31 bytes
Pruébalo en línea!
Toma entrada en el formato
y salidas como
(1 indexado).
Explicación
El programa completo es un patrón faltante con una acción seguida de un patrón con una acción faltante.
Como se ejecuta un patrón faltante en cada línea, el código dentro de las llaves se ejecuta para ambas líneas de entrada. La
c=$a;$a=$b;$b=c;
parte intercambia los dos valores en los índicesa
yb
(a través de la variable temporalc
). Esto solo tiene un efecto en la segunda línea, ya que en la primera líneaa
yb
aún no están definidos. Laa=$1;b=$2
parte se definea
como el primer campo yb
el segundo campo, que establece los valores apropiados para que la primera parte se ejecute en la segunda línea.Como una acción que falta es equivalente a
{print}
, el patrón imprime cada línea que coincide. Este patrón en particular esNR>1
: es decir, imprimir siempre que el número de línea sea mayor que 1, que resulta ser la línea 2. Esto se ejecuta después del intercambio de valores, completando así la tarea.fuente
q / kdb +, 17 bytes
Solución:
Ejemplo:
Explicación:
Una versión q de la k respuesta de Simon. Aplicar la asignación
:
función de a x en índices inversa-y con el valor de x indexado en y. Desglosado puedes ver más claramente:fuente