Sản phẩm của Cartesian gồm hai danh sách


14

Bài tập

Đưa ra hai danh sách các ký tự, xuất sản phẩm Cartesian của họ, tức là danh sách các cặp của mỗi chữ cái từ danh sách đầu tiên với mỗi chữ cái từ danh sách thứ hai.

Thí dụ

"123456""abcd"đưa ra:

[["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"]]

Đầu vào

Hai danh sách các ký tự hoặc chuỗi. Các ký tự được sử dụng sẽ là chữ a-z, A-Z, 0-9và số và một ký tự có thể xuất hiện nhiều lần và trong cả hai đầu vào cùng một lúc.

Đầu ra

Các sản phẩm của Cartesian của danh sách đầu vào. Đó là, một danh sách của mỗi cặp có thể được sắp xếp của một nhân vật từ danh sách đầu tiên và một nhân vật từ danh sách thứ hai. Mỗi cặp là một danh sách hoặc chuỗi hoặc tương tự của hai ký tự hoặc hai chuỗi có độ dài một. Độ dài của đầu ra sẽ bằng với độ dài của đầu vào.

Các cặp phải được liệt kê theo thứ tự; đầu tiên liệt kê ký tự đầu tiên của danh sách đầu tiên với danh sách đầu tiên của danh sách thứ hai, tiếp theo là tất cả các cặp ký tự đầu tiên của danh sách đầu tiên. Cặp cuối cùng bao gồm ký tự cuối cùng của danh sách đầu tiên cùng với ký tự cuối cùng của danh sách thứ hai.

Đầu ra phải là một danh sách các cặp phẳng; không phải là ma trận 2D trong đó các cặp được nhóm theo phần tử thứ nhất hoặc thứ hai của chúng.

Các trường hợp thử nghiệm

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 thay đổi. Tôi gặp sự cố mặc dù từ ngữ rằng các ký tự lặp lại trong chuỗi đầu vào có thể và sẽ gây ra các cặp lặp lại ở đầu ra (giả sử đó là cách diễn giải nó).
xnor

@xnor có thể dễ dàng hơn nếu thứ tự các cặp được cố định?
Adám

Tại sao tiêu đề nói "danh sách" nhưng cơ thể nói "danh sách các nhân vật"?
Rò rỉ Nun

Chỉ cần chắc chắn: là ["1a", "1b", "1c", "2a", "2b", "2c", "3a", "3b", "3c"]một định dạng đầu ra hợp lệ?
Shaggy

1
Bạn đã gắn thẻ này code-golfvì câu trả lời ngắn nhất sẽ thắng. Trong trường hợp hòa, câu trả lời đầu tiên để đạt được điểm đó thường là người chiến thắng (hiện tại là câu này ). Tuy nhiên, hãy cho nó một vài ngày nữa, trước khi chấp nhận một câu trả lời, nếu có. Và xem ở đây để được hướng dẫn trả lời câu hỏi của riêng bạn.
Shaggy

Câu trả lời:




7

Toán học, 12 byte

Tuples@{##}&

Lấy hai danh sách các ký tự làm đầu vào.


1
Cùng độ dài: Tuples@*ListCách khác, nếu các đầu tùy ý được cho phép:Tuples@*f
Máy

4

APL (Dyalog) , 4 byte

,∘.,

Hãy thử trực tuyến!

, làm phẳng

∘. người Cartesian

, ghép


Tôi không nghĩ flattenlà một mô tả hay ở đây, vì làm phẳng sẽ tạo ra kết quả không chính xác, tôi nghĩ rằng "thắt chặt" hoặc "giảm thứ hạng" hoặc một cái gì đó tương tự sẽ hoạt động. (Làm phẳng [1,2] x [1,2] là [1,1,1,2,2,1,2,2])
Zacharý

4

Ruby , 30 18 byte

-12 byte từ Jordan nhắc nhở tôi về cách sử dụng thông số kỹ thuật này cho lợi thế của tôi!

Lấy danh sách các ký tự làm đầu vào.

->a,b{a.product b}

Hãy thử trực tuyến!


1
Đặc tả cho biết đầu vào là "Hai danh sách các ký tự hoặc chuỗi", vì vậy tôi không nghĩ bạn cần .chars.
Jordan

1
Đó là một trình duyệt xấu hổ không nói ruby. Thật là một ngôn ngữ thân thiện ..
alexandros84



3

Tcl , 60 byte

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

Sử dụng:

% 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

Perl 6 , 4 byte

&[X]

Đây chỉ là một tham chiếu đến toán tử sản phẩm chéo tích hợp X. Nó hoạt động trên danh sách của bất kỳ loại, không chỉ các nhân vật.


3

JavaScript (ES6), 45 36 34 33 byte

Yêu cầu Firefox. Lấy cả hai đầu vào dưới dạng chuỗi hoặc dưới dạng mảng của các ký tự riêng lẻ.

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

Thử nó

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>


Phá hủy hoạt động trên chuỗi quá.
Neil

Cảm ơn, @Neil; quên cập nhật rằng sau khi tôi thay đổi phương thức tôi đang sử dụng.
Shaggy

x+ymột định dạng đầu ra hợp lệ?
Neil

@Neil: Đó là những gì tôi ban đầu sẽ đi cùng, nhưng, từ các trường hợp thử nghiệm, có vẻ như nó sẽ không hợp lệ; đọc lại các yêu cầu đầu ra, mặc dù, chúng dường như chỉ ra rằng nó có thể. Tôi sẽ yêu cầu làm rõ để chắc chắn.
Shaggy

1
@ alexandros84: Vâng, ES6 (+) là điều cần thiết nếu bạn đứng trước cơ hội cạnh tranh từ xa trong môn đánh gôn - đến khi bạn gõ function, bạn đã thua! Tôi sẽ đưa ra một vài gợi ý về câu trả lời của bạn sau, nhưng trong lúc này, hãy xem giải pháp ánh xạ mảng ban đầu của tôi trong lịch sử chỉnh sửa; bạn sẽ có thể tách nó ra và thay thế các hàm mũi tên bằng các hàm "thực".
Xù xì



2

QBIC , 29 byte

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

Điều này in các chuỗi 2 char với tất cả các kết hợp trên mỗi dòng.

Giải trình

   ;      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












1

Võng mạc , 49 byte

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

Hãy thử trực tuyến! Đưa đầu vào trên các dòng riêng biệt. Giải trình:

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

Mỗi ký tự trong chuỗi đầu tiên tạo ra một dòng riêng được tiền tố bởi chuỗi thứ hai.

¶¶.+
¶

Chuỗi thứ hai ban đầu bị xóa.

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

Đối với mỗi ký tự trong chuỗi đầu tiên, mỗi ký tự trong chuỗi thứ hai sẽ tạo một dòng riêng có tiền tố với ký tự đầu tiên.

¶.¶
¶

Các ký tự còn lại từ chuỗi đầu tiên sẽ bị xóa.


1

q / kdb +, 5 byte

Giải pháp:

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

Thí dụ:

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

1

Than , 8 7 byte

FθEη⁺ικ

Hãy thử trực tuyến! Liên kết là phiên bản dài dòng của mã. Giải thích: Các biến θηngầm định tham chiếu đến hai chuỗi đầu vào. Các lệnh vòng qua mỗi nhân vật của đầu vào đầu tiên, trong khi lệnh bản đồ trên mỗi nhân vật của đầu vào thứ hai concatenating biến vòng lặp ιvà biến bản đồ κ, kết quả trong số đó là mặc nhiên được in trên dòng riêng biệt.


Điều này dường như là 19 byte.
Máy

@CalculatorFeline Char than có trang mã riêng .
Neil

1

R , 29 byte

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

Hãy thử trực tuyến!

Lưu ý rằng ma trận R được điền bởi cột, do đó, kết quả là theo thứ tự được chỉ định bởi spec.

Nếu được phép có factorsđầu vào và đầu ra, có tích hợp ... nhưng người ta cần trích xuất các mức kết quả từ hệ số để cuối cùng nó sẽ có nhiều hơn 29 byte.

R , 11 byte

interaction

Hãy thử trực tuyến!


1

Japt , 5 2 byte

Japt hiện có một phương pháp cho sản phẩm của Cartesian.

Lấy đầu vào là 2 mảng chuỗi ký tự.

ïV

Thử nó


1

C # 7, 78 63 byte

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

đây không phải là một chương trình đầy đủ cũng không phải là một chức năng
ASCII - chỉ

Bạn phải viết một chương trình đầy đủ hoặc một chức năng và không phải đoạn trích.
Muhammad Salman

Tôi chỉ thay đổi nó. Nhưng nhiều câu trả lời trên trang này không phải là chương trình hoặc chức năng đầy đủ. Không chắc chắn tại sao cái này được chọn ra.
Dennis_E

btw, đây là lý do tại sao tôi không thích chơi gôn.
Dennis_E

Vì đây là một hàm, bạn có thể trực tiếp trả về chuỗi đầu ra thay vì ghi nó ra màn hình, tôi nghĩ rằng nó giúp bạn tiết kiệm ~ 20 byte.
- Phục hồi Monica
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.