Intercambiar dos elementos en un vector / matriz es muy simple en Octave:
x='abcde';
x([4,1])=x([1,4])
x =
dbcae
Desafortunadamente, todavía tengo que encontrar una manera de hacer esto dentro de una función anónima. Si bien la siguiente función es sintácticamente correcta, solo devuelve los dos elementos que se intercambian, no todo el x
vector:
f=@(x)(x([4,1])=x([1,4]))
f(x)
ans =
ad
¿Hay alguna manera de lograr el comportamiento deseado utilizando funciones anónimas de una manera golfística? ¿Se pueden intercambiar varios elementos de esta manera usando una función anónima?
Yo podría crear un vector de indexación: f=@(x)x([4,2,3,1,5])
, pero la creación de un vector tal forma dinámica es probable que tomar una gran cantidad de bytes también.
code-golf
array-manipulation
tips
octave
Stewie Griffin
fuente
fuente
Respuestas:
Lista de argumentos
Pruébalo en línea!
fuente
;
para el recuento de bytesSer
eval
Pruébalo en línea!
En Matlab los paréntesis no se pueden omitir:
fuente
eval
la respuesta :-)for
bucle dentro de una función anónima usandoeval
una gran cantidad de bytes guardados allí, y probablemente pueda hacerlo en muchos otros desafíos también ,,,s='x([1 4])=x([4 1])';eval(s)
- Supongo que esto es muy interesante si ya realizó una función para evaluar con caracteres mínimos.Matriz de celdas
Una opción es usar una matriz de celdas, como esta:
Pruébalo en línea!
fuente