L'échange de deux éléments dans un vecteur / matrice est très simple dans Octave:
x='abcde';
x([4,1])=x([1,4])
x =
dbcae
Malheureusement, je n'ai pas encore trouvé de moyen de le faire dans une fonction anonyme. Bien que la fonction ci-dessous soit syntaxiquement correcte, elle ne renvoie que les deux éléments qui sont échangés, pas le x
vecteur entier :
f=@(x)(x([4,1])=x([1,4]))
f(x)
ans =
ad
Existe-t-il un moyen d'atteindre le comportement souhaité en utilisant des fonctions anonymes de manière golfique? Plusieurs éléments peuvent-ils être échangés de cette façon à l'aide d'une fonction anonyme?
Je pourrais créer un vecteur d'indexation:, f=@(x)x([4,2,3,1,5])
mais la création dynamique d'un tel vecteur prendra probablement beaucoup d'octets également.
code-golf
array-manipulation
tips
octave
Stewie Griffin
la source
la source
Réponses:
Liste d'arguments
Essayez-le en ligne!
la source
;
aux fins du comptage d'octetsÊtre
eval
Essayez-le en ligne!
Dans Matlab, les parenthèses ne peuvent pas être omises:
la source
eval
:-)for
boucle à l'intérieur d'une fonction anonyme en utilisanteval
beaucoup d'économies là-bas, et peut probablement le faire sur de nombreux autres défis aussi ,,,s='x([1 4])=x([4 1])';eval(s)
- Je suppose que c'est surtout intéressant si vous avez déjà fait une fonction pour faire une évaluation avec un minimum de caractères.Réseau de cellules
Une option consiste à utiliser un tableau de cellules, comme ceci:
Essayez-le en ligne!
la source