Zamiana dwóch elementów w wektorze / macierzy jest bardzo prosta w Octave:
x='abcde';
x([4,1])=x([1,4])
x =
dbcae
Niestety, muszę jeszcze znaleźć sposób na wykonanie tego w anonimowej funkcji. Chociaż poniższa funkcja jest poprawna składniowo, zwraca tylko dwa zamienione elementy, a nie cały x
wektor:
f=@(x)(x([4,1])=x([1,4]))
f(x)
ans =
ad
Czy istnieje sposób na osiągnięcie pożądanego zachowania za pomocą anonimowych funkcji w golfowy sposób? Czy można w ten sposób zamienić kilka elementów za pomocą anonimowej funkcji?
I mogłaby utworzyć wektor indeksowania: f=@(x)x([4,2,3,1,5])
, ale tworząc taki wektor dynamicznie będzie prawdopodobnie zajmie dużo bajtów zbyt.
code-golf
array-manipulation
tips
octave
Stewie Griffin
źródło
źródło
Odpowiedzi:
Lista argumentów
Wypróbuj online!
źródło
;
na potrzeby liczenia bajtówByć
eval
Wypróbuj online!
W Matlab nawiasów nie można pominąć:
źródło
eval
odpowiedź :-)for
zapętlić wewnątrz anonimowej funkcji, używająceval
zaoszczędzonej tam dużej ilości bajtów, i prawdopodobnie może to zrobić także w wielu innych wyzwaniach ,,,s='x([1 4])=x([4 1])';eval(s)
- Myślę, że jest to najbardziej interesujące, jeśli już wykonałeś funkcję eval z minimalnymi znakami.Macierz komórek
Jedną z opcji jest użycie tablicy komórek, takiej jak ta:
Wypróbuj online!
źródło