Tugas:
Kembalikan array dengan semua pasangan yang memungkinkan antara elemen-elemen dari array.
Contoh
Dari a=["a", "b", "c", "d"];
kembali b=[["a","b"],["a","c"],["a","d"],["b","c"],["b","d"],["c","d"]]
.
Pasangan dapat dalam urutan apa pun selama semua kemungkinan kombinasi disertakan dan jelas ["b","d"]
sama untuk ["d","b"]
.
Memasukkan
Array elemen string unik yang terdiri dari karakter dari kelas [a-z]
.
Keluaran
2d array yang berisi semua pasangan elemen input yang memungkinkan.
Uji Kasus
input=["a","b","c"];
//output=[["a","b"],["a","c"],["b","c"]]
input=["a","b","c","d","e"];
//output=[["a","b"],["a","c"],["a","d"],["a","e"],["b","c"],["b","d"],["b","e"],["c","d"],["c","e"],["d","e"]]
Catatan: Saya tidak dapat menemukan duplikat untuk tantangan ini. Jika ada, beri tahu saya dengan komentar untuk mengajukan pertanyaan.
code-golf
array-manipulation
combinatorics
alexandros84
sumber
sumber
["c","b","a"]
dikembalikan?Jawaban:
Jelly , 2 byte
Cobalah online!
sumber
ÇK€Y
di footer.Haskell , 29 byte
Cobalah online! Contoh penggunaan:
f ["a","b","c"]
hasil[("a","b"),("a","c"),("b","c")]
.Dengan flag
-XTupleSections
ini dapat disingkat menjadi 27 byte, namun flag tersebut perlu dihitung:Cobalah online!
sumber
f l=l
.Mathematica, 14 byte
memasukkan
sumber
Haskell, 25 byte
Cobalah online!
Lingkaran luar (
x
) dan dalam (y
) melalui daftar input dan simpan pasangan(x,y)
hanya jikax < y
.sumber
05AB1E , 3 byte
Kode:
Menggunakan penyandian 05AB1E . Cobalah online!
Penjelasan:
sumber
vim,
5048Mengambil input dalam formulir
dan output sebagai
Penjelasan
Pertama,
AX<esc>
menambahkanX
ke input untuk menangani input 2-panjang, yang diperlukan untuk alasan yang akan segera menjadi jelas.Kemudian muncul makro rekursif pertama, dari formulir
qq...@qq@q
. (Rekam makroq
, jalankan sendiri lagi di akhir, akhiri rekaman, lalu jalankan sendiri sekali.) Dalam tubuh makro,Yp
duplikat garis saat ini,l
keluar dari makro jika garis sekarang panjang satu karakter, danX
menghapus karakter pertama dalam barisan. Ini adalah hasil akhir dari produksiMengabaikan
X
s untuk saat ini, yang harus kita lakukan adalah mengubahabcdX
, misalnya menjadiab / ac / ad / aX
. Ini dicapai dengan makro rekursif keduaqr...@rq
,.Dalam makro ini, pertama-tama kita menduplikasi baris (
Yp
), lalu menghapus semuanya kecuali dua karakter pertama dengan menggerakkan kanan dua (ll
) dan menghapus ke akhir baris (D
). Karena kursor sekarang berada di karakter kedua baris,kx
akan menghapus karakter kedua dari baris sebelumnya, yang kebetulan adalah karakter yang baru saja dipasangkan dengan karakter pertama di baris. Proses ini kemudian diulang mulai lagi dari awal garis (h
) sebanyak yang diperlukan karena sifat makro rekursif.Sekarang hanya masalah menjalankan makro pada setiap baris, yang dapat dicapai dengan
:g/./norm@r
(Saya tidak yakin mengapa ini berperilaku berbeda:%norm@r
, tetapi cukup untuk mengatakan, yang terakhir tidak berfungsi seperti yang dimaksudkan.) Baris denganX
dihapus dengan:g/X/d
, dan garis-garis kosong di ujung kiri sebagai akibat dari pembangunanr
makro dibersihkan dengandG
.sumber
Oktaf, 23 byte
Cobalah online!
sumber
Python 3 , 44 byte
Cobalah online!
Mengambil input sebagai parameter fungsi individual.
sumber
Brachylog , 5 byte
Cobalah online!
Bagaimana itu bekerja
sumber
R , 18 byte
membaca daftar dari stdin, mengembalikan matriks tempat kolom berpasangan.
Cobalah online!
sumber
Python, 53 byte
2 byte disimpan berkat @CalculatorFeline
Cobalah online!
sumber
a[i+1:]
bisaa[:i]
Oktaf ,
4948 byteFungsi anonim yang menghindari built-in (
nchoosek
).Cobalah online!
Penjelasan
x+j*x'
menggunakan penyiaran untuk membangun matriks bilangan kompleks di mana bagian nyata dan imajiner adalah semua pasangan titik kode dari inputx
.y=triu(...,1)
menjaga bagian segitiga atas tidak termasuk diagonal, membuat sisa elemen nol. Hasilnya ditugaskan ke variabely
.y=(...)(~~y)
mempertahankan elemen bukan nol dalam bentuk vektor kolom, yang ditugaskan ke variabely
.imag(...)
danreal(...)
mengekstrak bagian nyata dan imajiner.[... ... '']
mengkonversi kembali ke char untuk membangun output.sumber
Pari / GP , 34 byte
Cobalah online!
sumber
Python ≥ 2.7, 55 byte
repl.it!
sumber
Perl 6 , 17 byte
Wah, itu nama metode yang panjang.
sumber
Scala, 17 byte
sumber
Pyth ,
74 byte-3 byte terima kasih untuk Leaky Nun !
Cobalah online!
sumber
.cQ2
?.C
ketika melihat daftar. Tangkapan bagus!Ruby ,
38 3424 byteTerima kasih Seims untuk ide yang menyelamatkan 10 byte.
Cobalah online!
sumber
->x{x.combination(2).to_a}
menghemat beberapa byte :)JavaScript ES6, 52 byte
Jika ada seperti
flatMap
itu akan menghemat banyak byte.sumber
a=>[for(x of[...a])for(y of(a.shift(),a))[x,y]]
.[x,y]
akhirnya adalah bit yang mudah, itu hanya sebuah array literal.Python , 55 byte
Cobalah online!
Lebih panjang dari jawaban Python lainnya, tetapi menggunakan teknik yang berbeda jadi saya pikir ini layak untuk dikirim.
sumber
Japt , 2 byte
Mengujinya (
-Q
menandai untuk tujuan visualisasi saja)sumber
Python, 64 byte
sumber
Oktaf, 38 byte
Jawaban lain untuk menghindari
nchoosek
built-in.Cobalah online!
sumber
Clojure, 42 byte
Mengembalikan set perangkat :)
sumber
Python, 74 byte
sumber
Javascript (ES 5), dari 108 hingga 78 byte
Saya memposting jawaban saya hari ini tetapi saya jelas berjanji untuk tidak menerima jawaban saya sendiri:
sumber
a
, Anda perlu mendefinisikannya, tetapi Anda dapat membuat fungsix
.for(i=n+1;i<(x.length);i++)
menjadifor(i=n;++i<x.length;)
. Demikian juga, Anda dapat mengubahn<(x.length-1);n++
ken++<x.length-1
J , 17 byte
Cobalah online!
Penjelasan
sumber