Поменять местами два элемента в векторе / матрице в Octave очень просто:
x='abcde';
x([4,1])=x([1,4])
x =
dbcae
К сожалению, мне еще предстоит найти способ сделать это внутри анонимной функции. Хотя приведенная ниже функция синтаксически верна, она возвращает только два замененных элемента, а не весь x
вектор:
f=@(x)(x([4,1])=x([1,4]))
f(x)
ans =
ad
Есть ли способ добиться желаемого поведения с помощью анонимных функций в гольфе? Можно ли поменять несколько элементов таким образом, используя анонимную функцию?
Я мог бы создать индексный вектор:, f=@(x)x([4,2,3,1,5])
но динамическое создание такого вектора, вероятно, также займет много байтов.
code-golf
array-manipulation
tips
octave
Стьюи Гриффин
источник
источник
Ответы:
Список аргументов
Попробуйте онлайн!
источник
;
в целях подсчета байтовБыть
eval
Попробуйте онлайн!
В Matlab скобки не могут быть опущены:
источник
eval
:-)for
Цикл внутри анонимной функции,eval
сохраняя там много байтов, и, вероятно, может сделать это и во многих других задачах,s='x([1 4])=x([4 1])';eval(s)
- Я полагаю, это в основном интересно, если вы уже сделали функцию для выполнения eval с минимальным количеством символов.Сотовый массив
Один из вариантов - использовать массив ячеек, например так:
Попробуйте онлайн!
источник