Dada uma matriz de números inteiros positivos e dois índices válidos distintos, retorne a matriz com os dois elementos correspondentes aos dois índices trocados.
Você pode optar por usar a indexação 0 ou a indexação 1, mas os casos de teste abaixo serão indexados em 0.
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]
Isso é código-golfe . A resposta mais curta em bytes vence. Aplicam-se brechas padrão .
code-golf
array-manipulation
Freira Furada
fonte
fonte
m
e poden
ser tomado como uma matriz?Respostas:
C
/ C ++,5350.39 bytesExperimente online
Guardado 11 bytes graças a @Dennis
fonte
Linguagem de script da operação Flashpoint ,
9895 bytesModifica a matriz diretamente.
Explicação:
Ligue para:
Saída:
fonte
JavaScript ES6,
3632 bytesOlha, mãe, nenhuma variável temporária!
Tente
Digite uma lista de elementos separados por vírgula
a
e 2 números inteiros param
&n
.fonte
(a,m,n)=>[a[m],a[n]]=[a[n],a[m]]
? Isso produziria apenas os 2 elementos trocados sem o restante da matriz (por exemplo,[5,8,9],0,2
->[9,5]
).a
no final para nos fornecer a matriz completa e modificada. Ou estou perdendo completamente o que você está tentando dizer?Python 3 ,
4132 bytes-9 bytes graças a @notjagan
Experimente online!
Modifica seu argumento, que é um formato de saída válido .
fonte
Geléia , 7 bytes
Experimente online!
Como funciona
fonte
y
y
, mas não pensei em usá-lo aqui. Essa é uma resposta bastante inteligente.Jelly
código Jelly é válido?Japonês ,
1716 bytesExperimente online!
Guardou um byte graças a ETHproductions
fonte
MATL ,
76 bytesOs índices são baseados em 1.
Experimente online!
Explicação
Considere entradas
[11 13 15 3]
,[2 3]
.fonte
C # (.NET Core) ,
48 4331 bytesExperimente online!
Troca os números na matriz original, sem variáveis temporárias usadas. No entanto, não posso me responsabilizar por essa resposta, pois foi idéia de Neil .
fonte
(a,m,n)=>a[m]+=a[n]-(a[n]=a[m])
parece funcionar embora.Lisp comum , 42 bytes
-2 bytes graças a @coredump .
Experimente online!
Bastante simples, uma vez que existe uma macro Lisp Comum de swap:
rotatef
.fonte
Javascript ES6,
3634 bytesDemo
Mostrar snippet de código
fonte
CJam , 4 bytes
Experimente online!
fonte
Java 8 , 48 bytes
Entrada:
fonte
(a,b,c)->a[b]+=a[c]-(a[c]=a[b])
( 31 bytes )Collections::swap
é de 17 bytes ... pelo menos assumindo que isso se aplica a este desafio ...05AB1E , 10 bytes
Experimente online!
fonte
Oitava , 28 bytes
Experimente online!
Bastante satisfeito com este realmente :)
Recebe entrada no formulário
f([1,2,3,4],[1,2])
:, 1 indexado.Explicação:
fonte
Água-viva , 7 bytes
Leva uma lista e um par de índices. Experimente online!
Explicação
A água-viva tem uma função "modificar itens nos índices"
Z
, que faz exatamente o que precisamos. Os doisi
s pegam as entradas do STDIN.Z
toma como argumentos a segunda entrada, a função de reversãoR
e a lista. Em seguida,Z
realiza a modificação ep
imprime o resultado.fonte
R, 38 bytes
Parece um pouco longo, mas não posso ficar muito mais curto. Infelizmente, isso requer o retorno explícito
x
, exigindo{}
o corpo da função.pryr::f()
não reconhece a necessidade dex
como argumento de função, portanto não funciona: /.fonte
function(x,i)replace(x,i,rev(i))
que funcionaria, mesmo com sintaxe pryr.replace(x,i,x[rev(i)])
, senão você colocará os índices em vez de seus valores.E / S de Shenzhen, 735 bytes
23 ¥, 810 Potência, 48 Linhas de Código
AVISO LEGAL: As matrizes são 0 terminadas neste. Matrizes são um pé no saco para trabalhar com E / S de Shenzhen, caso contrário.
Na verdade, eu fiz um nível de vapor para este jogo. Você pode jogar aqui.
EDIT: Aaand eu acabei de perceber que eu disse que a matriz foi ordenada. Heck.
fonte
Swift,
11165 bytes (indexado 0)O Swift já é notório por ser uma das piores linguagens de código-golfe, mas aqui está uma função
que faz uso de expressões ternárias:Confira! - Uso:
t(l:[1,2,3],m:0,n:1)
.fonte
k ( kona ), 13 bytes
Bastante básico, mas funciona. Ex:
fonte
Perl 5 , 32 bytes
-3 bytes graças a @Dom Hastings !
30 bytes de código +
-pa
sinalizadores.Experimente online!
Para a frente, usando fatias de matriz.
fonte
@F[pop@p,@p]=@F[@p=<>];$_="@F"
.Mathematica, 32 bytes
fonte
a[[{##2}]]==a[[{#3,#2}]]
deve sera[[{##2}]]=a[[{#3,#2}]]
(usandoSet
, nãoEquals
) #C, 42 bytes
Modifique a matriz no local com um valor temporário.
C,
6058 bytesUm pouco mais interessante, sem usar nenhum valor temporário ...
C, 49 bytes
Usando XOR
fonte
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á quebrado: SIGSEGV.Pitão ,
178 bytesEconomizou 9 bytes graças a Leaky Num.
Teste online!
Esta é 0-indexados, e os índices são fornecidos como uma tupla:
(n, m)
.Explicações
fonte
@LQ.rUQE
Mathematica, 20 bytes
Função pura usando dois argumentos no seguinte formato indexado em 1 (e possivelmente abusivo): o segundo caso de teste
[5,8,9]; 0 2; [9,8,5]
seria chamado como(os espaços são estranhos e apenas para análise visível).
Permute
é a função interna que aplica uma permutação a uma lista eCycles[{{a,b}}]
representa a permutação que troca osa
th eb
th th elementos de uma lista e ignora o restante.fonte
~
fazem?~
é a notação de infixo do Mathematica para uma função binária:x~f~y
significa a mesma coisa quef[x,y]
.Código da máquina x86, 10 bytes
Essa é uma função escrita no código de máquina x86 de 32 bits que troca os valores nos índices especificados em uma determinada matriz. A matriz é modificada no local e a função não retorna um valor.
Uma convenção de chamada personalizada é usada, exigindo que os parâmetros da função sejam passados nos registradores :
EBX
registro.ECX
registro.(Supõe-se que seja um índice válido.)
EDX
registro.(Supõe-se que seja um índice válido.)
Isso mantém o tamanho baixo e está em conformidade com todos os requisitos formais, mas significa que a função não pode ser facilmente chamada de outros idiomas como C. Você precisaria chamá-lo de outro programa em linguagem assembly. (Você pode reescrevê-lo para usar qualquer registrador de entrada, sem afetar a contagem de bytes; não há nada de mágico nos que eu escolhi.)
Ungolfed:
fonte
R, 34 bytes
fonte
Java 8 + InverseY , 27 bytes
Apenas chama a função swap ... esta é uma referência método do tipo
Consumer3<List, Integer, Integer>
.Experimente online! (cabeçalho e rodapé para clichê e cópia da
Consumer3
interface)fonte
JavaScript (ES2015),
665749 bytesUma abordagem diferente (infelizmente, mais longa) do que as respostas JavaScript anteriores
Fonte
fonte
(s,h,o,w=s.splice.bind(s))=>w(h,1,...w(o,1,s[h]))
49 bytesawk, 31 bytes
Experimente online!
Recebe entrada no formato
e saídas como
(Indexado 1).
Explicação
O programa inteiro é um padrão ausente com uma ação seguida por um padrão com uma ação ausente.
Como um padrão ausente é executado em cada linha, o código dentro das chaves é executado nas duas linhas de entrada. A
c=$a;$a=$b;$b=c;
peça troca os dois valores nos índicesa
eb
(através da variável temporáriac
). Isso só tem efeito na segunda linha, pois na primeira linhaa
eb
ainda não está definido. Aa=$1;b=$2
parte definea
como o primeiro campo eb
o segundo campo, que define os valores apropriados para que a primeira parte seja executada na segunda linha.Como uma ação ausente é equivalente a
{print}
, o padrão imprime todas as linhas correspondentes. Esse padrão em particular éNR>1
: isto é, imprima sempre que o número da linha for maior que 1, que passa a ser a linha 2. Isso é executado após a troca de valores, ocorrendo a conclusão da tarefa.fonte
q / kdb +, 17 bytes
Solução:
Exemplo:
Explicação:
Uma versão q da resposta k de Simon. Aplique a
:
função de atribuição a x nos índices reversos-y com o valor de x indexado em y. Dividido, você pode ver mais claramente:fonte