ผลิตภัณฑ์คาร์ทีเซียนของสองรายการ


14

งาน

ให้รายชื่อตัวละครสองตัวส่งออกผลิตภัณฑ์คาร์ทีเซียนของพวกเขานั่นคือรายการของการจับคู่ของตัวอักษรแต่ละตัวจากรายการแรกที่มีตัวอักษรแต่ละตัวจากรายการที่สอง

ตัวอย่าง

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

อินพุต

รายการอักขระหรือสตริงสองรายการ อักขระที่ใช้จะเป็นตัวอักษรa-z, A-Z, 0-9และตัวเลขและอักขระสามารถเกิดขึ้นได้หลายครั้งและในอินพุตทั้งสองในเวลาเดียวกัน

เอาท์พุต

ผลิตภัณฑ์คาร์ทีเซียนของรายการอินพุต นั่นคือรายการของแต่ละคู่ที่เป็นไปได้สั่งตัวละครจากรายการแรกและตัวละครจากรายการที่สอง แต่ละคู่เป็นรายการหรือสตริงหรือคล้ายกันของตัวละครสองตัวหรือสองสายยาวหนึ่ง ความยาวของเอาต์พุตจะเท่ากับผลคูณของความยาวของอินพุต

คู่จะต้องอยู่ในลำดับ; รายการแรกอักขระแรกของรายการแรกกับรายการแรกของรายการที่สองตามด้วยการจับคู่ทั้งหมดของอักขระแรกของรายการแรก คู่สุดท้ายประกอบด้วยอักขระตัวสุดท้ายของรายการแรกพร้อมกับอักขระตัวสุดท้ายของรายการที่สอง

ผลลัพธ์จะต้องเป็นรายการคู่เรียบ ไม่ใช่เมทริกซ์ 2D ที่คู่ถูกจัดกลุ่มตามองค์ประกอบที่หนึ่งหรือสอง

กรณีทดสอบ

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เปลี่ยนแล้ว ฉันมีปัญหาในการใช้ถ้อยคำที่ตัวละครซ้ำในสายป้อนข้อมูลสามารถและควรทำให้คู่ที่ซ้ำกันในการส่งออก (สมมติว่าเป็นวิธีการตีความ)
xnor

@ xnor อาจจะง่ายขึ้นถ้าลำดับของคู่คงที่หรือไม่
Adám

ทำไมชื่อเรื่องถึงพูดว่า "list" แต่เนื้อเรื่องก็พูดว่า "list of characters"?
Leun Nun

เพียงเพื่อให้แน่ใจว่า: เป็น["1a", "1b", "1c", "2a", "2b", "2c", "3a", "3b", "3c"]รูปแบบผลลัพธ์ที่ถูกต้องหรือไม่
Shaggy

1
คุณติดแท็กนี้เป็นcode-golfคำตอบที่สั้นที่สุดจึงจะชนะ ในกรณีที่มีการผูกคำตอบแรกที่ไปถึงคะแนนที่มักจะเป็นผู้ชนะ (ปัจจุบันนี้ ) ให้อย่างน้อยอีกสองสามวันอย่างน้อยก่อนที่จะยอมรับคำตอบแม้ว่าถ้าทั้งหมด และดูที่นี่สำหรับแนวทางในการตอบคำถามของคุณเอง
Shaggy

คำตอบ:




7

Mathematica ขนาด 12 ไบต์

Tuples@{##}&

ใช้อักขระสองรายการเป็นอินพุต


1
ความยาวเท่ากัน: Tuples@*Listอีกทางหนึ่งถ้าอนุญาตให้ใช้หัวใดก็ได้:Tuples@*f
CalculatorFeline

5

APL (Dyalog) 4 ไบต์

,∘.,

ลองออนไลน์!

, เรียบ

∘. คาร์ทีเซียน

, เรียงต่อกัน


ฉันไม่คิดว่าflattenเป็นคำอธิบายที่ดีเนื่องจากแบนจะให้ผลลัพธ์ที่ไม่ถูกต้องฉันคิดว่า "กระชับ" หรือ "ลดอันดับ" หรือสิ่งที่คล้ายกันควรใช้งานได้ (แบน [1,2] x [1,2] คือ [1,1,1,2,2,1,2,2])
Zacharý

4

Ruby , 30 18 ไบต์

-12 bytes จาก Jordan ทำให้ฉันนึกถึงวิธีการใช้ spec เพื่อประโยชน์ของฉัน!

ใช้รายการอักขระเป็นอินพุต

->a,b{a.product b}

ลองออนไลน์!


1
สเปคบอกว่าใส่เป็น "สองรายการของตัวละครหรือสตริง" .charsดังนั้นผมจึงไม่คิดว่าคุณต้อง
Jordan

1
มันเป็นความอัปยศเบราว์เซอร์ไม่พูดทับทิม ช่างเป็นภาษาที่เป็นมิตร ..
alexandros84

4

Perl 6 , 4 ไบต์

&[X]

Xนี่เป็นเพียงการอ้างอิงถึงในตัวผู้ประกอบการสินค้าข้าม มันใช้งานได้กับรายการทุกประเภทไม่เพียงแค่ตัวละคร




3

Tcl , 60 ไบต์

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

ใช้:

% 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 ไบต์

ต้องใช้ Firefox รับอินพุตทั้งสองเป็นสตริงหรือเป็นอาร์เรย์ของอักขระแต่ละตัว

a=>b=>[for(x of a)for(y of b)x+y]
  • -1 ขอบคุณไบต์CalculatorFeline<space>จำหลงทาง

ลองมัน

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>


การทำลายโครงสร้างใช้กับสตริงได้เช่นกัน
Neil

ขอบคุณ @Neil; ลืมอัปเดตหลังจากเปลี่ยนวิธีที่ฉันใช้อยู่
Shaggy

เป็นx+yรูปแบบการออกที่ถูกต้อง?
Neil

@ Neil: นั่นคือสิ่งที่ฉันจะไปด้วย แต่จากกรณีทดสอบปรากฏว่าไม่ถูกต้อง; ตรวจสอบข้อกำหนดเอาต์พุตอีกครั้ง แต่ดูเหมือนว่าอาจเป็นไปได้ ฉันจะขอคำชี้แจงเพื่อให้แน่ใจ
Shaggy

1
@ alexandros84: ใช่ ES6 (+) เป็นสิ่งสำคัญหากคุณต้องยืนแม้กระทั่งโอกาสในการแข่งขันกอล์ฟในระยะไกล - ตามเวลาที่คุณพิมพ์functionคุณเสียไปแล้ว! ฉันจะโยนคำแนะนำของคุณในภายหลัง แต่ในระหว่างนี้ลองดูวิธีแก้ปัญหาการทำแผนที่อาเรย์ดั้งเดิมของฉันในประวัติการแก้ไข คุณควรจะสามารถตัดออกและแทนที่ฟังก์ชั่นลูกศรด้วยฟังก์ชั่น "ของจริง"
Shaggy



2

QBIC , 29 ไบต์

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

สิ่งนี้พิมพ์สตริง 2-char ที่มีชุดค่าผสมทั้งหมดในหนึ่งบรรทัด

คำอธิบาย

   ;      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 ไบต์

Z*

*เป็นผู้ดำเนินการทั่วไปสำหรับผลิตภัณฑ์และส่วนนำหน้าZทำให้เป็นผลิตภัณฑ์คาร์ทีเซียนและสามารถใช้สองสตริงเป็นอาร์กิวเมนต์

ลองออนไลน์!











1

เรติน่า 49 ไบต์

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

ลองออนไลน์! ใช้อินพุตในบรรทัดแยกกัน คำอธิบาย:

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

อักขระแต่ละตัวในสตริงแรกสร้างบรรทัดแยกที่นำหน้าด้วยสตริงที่สอง

¶¶.+
¶

สายอักขระที่สองเดิมจะถูกลบ

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

สำหรับอักขระแต่ละตัวในสตริงแรกอักขระแต่ละตัวในสตริงที่สองจะสร้างบรรทัดแยกที่นำหน้าด้วยอักขระตัวแรก

¶.¶
¶

อักขระซ้ายจากสตริงแรกจะถูกลบ


1

q / kdb +, 5 ไบต์

วิธีการแก้:

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

ตัวอย่าง:

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

1

ถ่าน , 8 7 ไบต์

FθEη⁺ικ

ลองออนไลน์! การเชื่อมโยงคือการใช้รหัสเวอร์ชันอย่างละเอียด คำอธิบาย: ตัวแปรθและηอ้างอิงถึงสองสายอินพุตโดยปริยาย คำสั่งลูปมากกว่าลักษณะของการป้อนข้อมูลแต่ละครั้งแรกในขณะที่คำสั่งแผนที่มากกว่าลักษณะของการป้อนข้อมูลที่เชื่อมโยงสองตัวแปรห่วงแต่ละιที่และตัวแปรแผนที่κ, ผลจากการที่มีการพิมพ์โดยปริยายในบรรทัดแยกกัน


ดูเหมือนว่าจะเป็น 19 ไบต์
CalculatorFeline

@CalculatorFeline ถ่านมีของตัวเองหน้ารหัส
Neil

1

R , 29 ไบต์

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

ลองออนไลน์!

โปรดทราบว่าเมทริกซ์ R จะเต็มไปด้วยคอลัมน์ดังนั้นผลลัพธ์จะอยู่ในลำดับที่กำหนดโดยข้อมูลจำเพาะ

หากได้รับอนุญาตให้มีfactorsอินพุทและเอาท์พุทจะมีบิวท์อิน ... แต่มีความต้องการที่จะดึงระดับผลลัพธ์ที่ได้จากปัจจัยดังนั้นในท้ายที่สุดมันจะมากกว่า 29 ไบต์

R , 11 ไบต์

interaction

ลองออนไลน์!



1

C # 7, 78 63 ไบต์

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

นี่ไม่ใช่โปรแกรมหรือฟังก์ชั่นเต็มรูปแบบ
เฉพาะ ASCII เท่านั้น

คุณควรจะเขียนโปรแกรมเต็มรูปแบบหรือฟังก์ชั่นและไม่ตัวอย่าง
มูฮัมหมัดซัลมาน

ฉันแค่เปลี่ยนมัน แต่คำตอบมากมายในหน้านี้ไม่ใช่โปรแกรมหรือฟังก์ชั่นเต็มรูปแบบ ไม่แน่ใจว่าทำไมคนนี้ถูกแยกออกมา
Dennis_E

btw นี่คือเหตุผลที่ฉันไม่ชอบ code golf
Dennis_E

เนื่องจากนี่เป็นฟังก์ชั่นคุณสามารถส่งคืนสตริงเอาต์พุตโดยตรงแทนที่จะเขียนลงบนหน้าจอฉันคิดว่ามันช่วยคุณประหยัดได้ถึง 20 ไบต์
sundar - Reinstate Monica
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.