Das Vertauschen zweier Elemente in einem Vektor / einer Matrix ist in Octave sehr einfach:
x='abcde';
x([4,1])=x([1,4])
x =
dbcae
Leider muss ich noch einen Weg finden, um dies in einer anonymen Funktion zu tun. Die folgende Funktion ist zwar syntaktisch korrekt, gibt jedoch nur die beiden Elemente zurück, die vertauscht werden, nicht den gesamten x
Vektor:
f=@(x)(x([4,1])=x([1,4]))
f(x)
ans =
ad
Gibt es eine Möglichkeit, mit anonymen Funktionen auf golferische Weise das gewünschte Verhalten zu erreichen? Können auf diese Weise mehrere Elemente mit einer anonymen Funktion vertauscht werden?
Ich könnte einen Indexierungsvektor erstellen:, f=@(x)x([4,2,3,1,5])
aber das dynamische Erstellen eines solchen Vektors wird wahrscheinlich auch viele Bytes benötigen.
code-golf
array-manipulation
tips
octave
Stewie Griffin
quelle
quelle
Antworten:
Argumentliste
Probieren Sie es online!
quelle
;
für die Zwecke der Byte-Zählung entfernenSein
eval
Probieren Sie es online!
In Matlab können die Klammern nicht weggelassen werden:
quelle
eval
die Antwort :-)for
Schleife innerhalb einer anonymen Funktion miteval
einer Menge von Bytes dort gespeichert, und kann es wahrscheinlich auf viele andere Herausforderungen auch tun ,,,s='x([1 4])=x([4 1])';eval(s)
- Ich nehme an, dass dies am interessantesten ist, wenn Sie bereits eine Funktion erstellt haben, mit der Sie mit minimalen Zeichen auswerten können.Zellenarray
Eine Möglichkeit besteht darin, ein Zellenarray wie folgt zu verwenden:
Probieren Sie es online!
quelle