Produk Cartesian dari dua daftar


14

Tugas

Diberikan dua daftar karakter, hasilkan produk Kartesius mereka, yaitu daftar pasangan dari setiap huruf dari daftar pertama dengan setiap huruf dari daftar kedua.

Contoh

"123456"dan "abcd"berikan:

[["1","a"],["1","b"],["1","c"],["1","d"],["2","a"],["2","b"],["2","c"],["2","d"],["3","a"],["3","b"],["3","c"],["3","d"],["4","a"],["4","b"],["4","c"],["4","d"],["5","a"],["5","b"],["5","c"],["5","d"],["6","a"],["6","b"],["6","c"],["6","d"]]

Memasukkan

Dua daftar karakter atau string. Karakter yang digunakan akan berupa alfanumerik a-z, A-Z, 0-9dan sebuah karakter dapat muncul beberapa kali sekaligus di kedua input pada saat yang bersamaan.

Keluaran

Produk Cartesian dari daftar input. Yaitu, daftar setiap pasangan karakter yang mungkin dipesan dari daftar pertama dan karakter dari daftar kedua. Setiap pasangan adalah daftar atau string atau mirip dengan dua karakter, atau dua string panjang-satu. Panjang output akan sama dengan produk dari panjang input.

Pasangan harus terdaftar dalam urutan; pertama daftar karakter pertama dari daftar pertama dengan yang pertama dari daftar kedua, diikuti oleh semua pasangan karakter pertama dari daftar pertama. Pasangan terakhir terdiri dari karakter terakhir dari daftar pertama bersama-sama dengan karakter terakhir dari daftar kedua.

Outputnya harus berupa daftar pasangan datar; bukan matriks 2D di mana pasangan dikelompokkan berdasarkan elemen pertama atau kedua.

Uji kasus

inputs               output

"123456", "abcd"     [["1","a"],["1","b"],["1","c"],["1","d"],["2","a"],["2","b"],["2","c"],["2","d"],["3","a"],["3","b"],["3","c"],["3","d"],["4","a"],["4","b"],["4","c"],["4","d"],["5","a"],["5","b"],["5","c"],["5","d"],["6","a"],["6","b"],["6","c"],["6","d"]]
"abc", "123"         [["a","1"],["a","2"],["a","3"],["b","1"],["b","2"],["b","3"],["c","1"],["c","2"],["c","3"]]
"aa", "aba"          [["a","a"],["a","b"],["a","a"],["a","a"],["a","b"],["a","a"]]

@ Adám Berubah. Saya mengalami kesulitan meskipun mengatakan bahwa karakter yang berulang dalam string input dapat dan harus menyebabkan pasangan berulang dalam output (dengan asumsi itulah bagaimana menafsirkannya).
xnor

@ xnor mungkin lebih mudah jika urutan pasangan diperbaiki?
Adám

Mengapa judul mengatakan "daftar" namun badan mengatakan "daftar karakter"?
Leaky Nun

Hanya untuk memastikan: apakah ["1a", "1b", "1c", "2a", "2b", "2c", "3a", "3b", "3c"]format output yang valid?
Shaggy

1
Anda menandai ini karena code-golfitu jawaban terpendek menang. Dalam hal seri, jawaban pertama untuk mencapai skor itu biasanya adalah pemenang (saat ini yang ini ). Berikan beberapa hari lagi, setidaknya, sebelum menerima jawaban, jika, sama sekali. Dan lihat di sini untuk panduan tentang menjawab pertanyaan Anda sendiri.
Shaggy

Jawaban:




7

Mathematica, 12 byte

Tuples@{##}&

Mengambil dua daftar karakter sebagai input.


1
Panjang yang sama: Tuples@*ListAtau, jika kepala sewenang-wenang diizinkan:Tuples@*f
CalculatorFeline

5

APL (Dyalog) , 4 byte

,∘.,

Cobalah online!

, meratakan

∘. Cartesian

, rangkaian


Saya pikir flattenini bukan deskripsi yang baik di sini, karena perataan akan menghasilkan hasil yang salah, saya pikir "kencangkan" atau "kurangi peringkat" atau sesuatu yang serupa seharusnya bekerja. (Diratakan [1,2] x [1,2] adalah [1,1,1,2,2,1,2,2])
Zacharý

4

Ruby , 30 18 byte

-12 byte dari Jordan mengingatkan saya tentang cara menggunakan spec untuk keuntungan saya!

Mengambil daftar karakter sebagai input.

->a,b{a.product b}

Cobalah online!


1
Spesifikasi mengatakan inputnya adalah "Dua daftar karakter atau string," jadi saya rasa Anda tidak perlu .chars.
Jordan

1
Sayang browser tidak berbicara ruby. Bahasa yang ramah ..
alexandros84

4

Perl 6 , 4 byte

&[X]

Ini hanya referensi ke operator produk lintas bawaan X. Ini berfungsi pada daftar apa pun, bukan hanya karakter.




3

Tcl , 60 byte

proc p x\ y {lmap X $x {lmap Y $y {lappend l $X\ $Y}};set l}

Menggunakan:

% p {1 2 3} {a 2 2}
{1 a} {1 2} {1 2} {2 a} {2 2} {2 2} {3 a} {3 2} {3 2}

3

JavaScript (ES6), 45 36 34 33 byte

Membutuhkan Firefox. Mengambil input sebagai string atau sebagai array karakter individu.

a=>b=>[for(x of a)for(y of b)x+y]

Cobalah

f=
a=>b=>[for(x of a)for(y of b)x+y]
oninput=_=>console.clear()&console.log(f(i.value)(j.value))
console.log(f(i.value="123456")(j.value="abcd"))
<input id=i><input id=j>


Destrukturisasi juga bekerja pada string.
Neil

Terima kasih, @Neil; lupa memperbarui itu setelah saya mengubah metode yang saya gunakan.
Shaggy

Apakah x+yformat output yang valid?
Neil

@ Neil: Itulah awalnya saya akan pergi dengan tetapi, dari kasus uji, tampaknya tidak akan valid; membaca ulang persyaratan output, meskipun, mereka tampaknya mengindikasikan bahwa itu mungkin. Saya akan meminta klarifikasi untuk memastikan.
Shaggy

1
@ alexandros84: Ya, ES6 (+) sangat penting jika Anda memiliki peluang kecil untuk bisa bersaing dalam golf - saat Anda mengetik function, Anda sudah kalah! Saya akan memberikan beberapa petunjuk pada jawaban Anda nanti, tetapi sementara itu, lihat solusi pemetaan array asli saya dalam sejarah edit; Anda harus bisa merobeknya dan mengganti fungsi panah dengan fungsi "nyata".
Shaggy



2

QBIC , 29 byte

[_l;||[_l;||?_sA,a,1|+_sB,b,1

Ini mencetak string 2-char dengan semua kombinasi pada satu baris masing-masing.

Penjelasan

   ;      Read in string A$
 _l |     Get its length as b
[    |    and kick off a FOR-loop from 1 to that
[_l;||    Do the same for B$
          Note that, while the FOR-loop may pass this code several times, the
          'read-from cmd line' is done only once.
?_sA,a,1| PRINT the character from A$ at the position of the 'a' loop counter
+_sB,a,1   concatenated with the char from B$ at the pos of the 'b' loop counter


2

MATL , 2 byte

Z*

*adalah operator umum untuk produk dan awalan Zmenjadikannya produk kartesius dan dapat mengambil dua string sebagai argumen.

Cobalah online!











1

Retina , 49 byte

.(?=.*¶(.+))
$1$&¶
¶¶.+
¶
.(?=.*(.)¶)
$1$&¶
¶.¶
¶

Cobalah online! Mengambil input pada saluran terpisah. Penjelasan:

.(?=.*¶(.+))
$1$&¶

Setiap karakter dalam string pertama menghasilkan baris terpisah yang diawali oleh string kedua.

¶¶.+
¶

String kedua asli dihapus.

.(?=.*(.)¶)
$1$&¶

Untuk setiap karakter di string pertama, setiap karakter di string kedua menghasilkan baris terpisah yang diawali dengan karakter pertama.

¶.¶
¶

Karakter sisa dari string pertama dihapus.


1

q / kdb +, 5 byte

Larutan:

cross           / yup, there's a built-in to do exactly this

Contoh:

q)"123456"cross"abcd"
"1a"
"1b"
"1c"
"1d"
"2a"
"2b"
"2c"
"2d"
"3a"
"3b"
"3c"
"3d"
"4a"
"4b"
...etc

1

Arang , 8 7 byte

FθEη⁺ικ

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan: Variabel θdan ηsecara implisit merujuk pada dua string input. The perintah loop atas setiap karakter dari input pertama, sedangkan perintah peta lebih setiap karakter dari input kedua concatenating variabel loop ιdan variabel peta κ, yang hasilnya secara implisit dicetak pada baris terpisah.


Ini tampaknya 19 byte.
CalculatorFeline

@CalculatorFeline Charcoal memiliki halaman kode sendiri .
Neil

1

R , 29 byte

function(x,y)outer(x,y,paste)

Cobalah online!

Perhatikan bahwa matriks R diisi oleh kolom, sehingga hasilnya dalam urutan yang ditentukan oleh spesifikasi.

Jika diizinkan untuk memiliki factorsinput dan output, ada built-in ... tetapi orang perlu mengekstraksi tingkat yang dihasilkan dari faktor sehingga pada akhirnya akan lebih dari 29 byte.

R , 11 byte

interaction

Cobalah online!


1

Japt , 5 2 byte

Japt sekarang memiliki metode untuk produk Cartesian.

Mengambil input sebagai 2 larik string karakter.

ïV

Cobalah


1

C # 7, 78 63 byte

(a,b)=>$"({string.Join(",",a.SelectMany(x=>b,(x,y)=>(x,y)))})";

ini bukan program lengkap atau fungsi
ASCII

Anda seharusnya menulis program lengkap atau fungsi dan bukan cuplikan.
Muhammad Salman

Saya baru saja mengubahnya. Tetapi banyak jawaban di halaman ini bukan program atau fungsi lengkap. Tidak yakin mengapa yang ini dipilih.
Dennis_E

btw, ini sebabnya saya tidak suka kode golf.
Dennis_E

Karena ini adalah fungsi, Anda dapat langsung mengembalikan string output daripada menulisnya ke layar, saya pikir itu menghemat ~ 20 byte.
sundar - Reinstate Monica
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.