Bagaimana cara menukar elemen dalam vektor menggunakan fungsi anonim di Oktaf?


15

Menukar dua elemen dalam vektor / matriks sangat sederhana dalam Oktaf:

x='abcde';
x([4,1])=x([1,4])
x = 
   dbcae

Sayangnya, saya belum menemukan cara untuk melakukan ini di dalam fungsi anonim. Sementara fungsi di bawah ini secara sintaksis benar, itu hanya mengembalikan dua elemen yang ditukar, bukan seluruh xvektor:

f=@(x)(x([4,1])=x([1,4]))
f(x)
ans = 
     ad

Apakah ada cara untuk mencapai perilaku yang diinginkan menggunakan fungsi anonim dengan cara golf? Bisakah beberapa elemen ditukar dengan cara ini menggunakan fungsi anonim?

Saya dapat membuat vektor pengindeksan:, f=@(x)x([4,2,3,1,5])tetapi membuat vektor seperti itu secara dinamis kemungkinan akan membutuhkan banyak byte juga.


Jawaban:


21

Daftar Argumen

f=@(x,y=x([4 1])=x([1 4]))x;

Cobalah online!


5
Tunggu apa ? Saya tidak pernah tahu ini mungkin di Octave. Ini membuka begitu banyak teknik baru ....
Sanchises

4
Apa yang ada di ...?
Stewie Griffin

1
Silakan posting ini di Tips untuk pertanyaan Oktaf! Dengan teknik ini, pada dasarnya Anda bisa melakukan semua yang ada di daftar argumen, jadi Anda tidak perlu memilih antara fungsi 'penuh' dan anonim lagi. Saya terkejut.
Sanchises

3
Luar biasa. BTW, Anda dapat menghapus final ;untuk keperluan byte byte
Luis Mendo

Terima kasih untuk semuanya. @ Sanchises Tampaknya Oktaf adalah bahasa yang mengejutkan. Hati-hati! Itu ditambahkan ke tips.
rahnema1

11

Menjadi eval

f=@(x)eval"x([4 1])=x([1 4])"

Cobalah online!


Di Matlab tanda kurung tidak dapat dihilangkan:

f=@(x)eval('x([4 1])=x([1 4])')

9
Hanya di PPCG evaljawabannya :-)
Stewie Griffin

Apakah Anda ingin menambahkan ini ke pertanyaan kiat Oktaf? forloop di dalam fungsi anonim menggunakan evalbanyak byte yang disimpan di sana, dan mungkin dapat melakukannya pada banyak tantangan lain juga ,,,
Stewie Griffin

Tidak yakin apakah ini golf, tetapi saya kira Anda dapat melakukannya bahkan tanpa fungsi anonim: s='x([1 4])=x([4 1])';eval(s)- Saya kira ini sebagian besar menarik jika Anda sudah membuat fungsi untuk melakukan eval dengan karakter minimal.
Dennis Jaheruddin


2
Saya pikir jawaban ini adalah satu-satunya yang sejauh ini adalah Oktaf dan Matlab yang valid.
Batman

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.