Trocar dois elementos em um vetor / matriz é muito simples no Octave:
x='abcde';
x([4,1])=x([1,4])
x =
dbcae
Infelizmente, ainda não encontrei uma maneira de fazer isso dentro de uma função anônima. Embora a função abaixo esteja sintaticamente correta, ela apenas devolve os dois elementos que são trocados, e não o x
vetor inteiro :
f=@(x)(x([4,1])=x([1,4]))
f(x)
ans =
ad
Existe uma maneira de alcançar o comportamento desejado usando funções anônimas de um modo de golfe? Vários elementos podem ser trocados dessa maneira usando uma função anônima?
Eu poderia criar um vetor de indexação:, f=@(x)x([4,2,3,1,5])
mas criar esse vetor dinamicamente provavelmente também levará muitos bytes.
code-golf
array-manipulation
tips
octave
Stewie Griffin
fonte
fonte
Respostas:
Lista de argumentos
Experimente online!
fonte
;
para fins de contagem de bytesEstar
eval
Experimente online!
No Matlab, os parênteses não podem ser omitidos:
fonte
eval
a resposta :-)for
loop dentro de uma função anônima usandoeval
salvou um monte de bytes lá, e provavelmente pode fazê-lo em muitos outros desafios também ,,,s='x([1 4])=x([4 1])';eval(s)
- Suponho que isso seja interessante principalmente se você já criou uma função para avaliar com caracteres mínimos.Matriz celular
Uma opção é usar uma matriz de células, assim:
Experimente online!
fonte