두 목록의 데카르트 곱


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

제목에 "목록"이 표시되고 본문에 "문자 목록"이 표시되는 이유는 무엇입니까?
Leaky Nun

확실하게 : ["1a", "1b", "1c", "2a", "2b", "2c", "3a", "3b", "3c"]유효한 출력 형식입니까?
얽히고 설킨

1
당신은 이것을 code-golf최단 답변 으로 태그했습니다 . 동점 인 경우 해당 점수에 도달하는 첫 번째 답변은 일반적으로 승자 (현재는 답변 )입니다. 그래도 대답을 수락하기 전에 적어도 며칠을 더주십시오. 자신의 질문에 대답하기위한 지침 은 여기 를 참조 하십시오 .
얽히고 설킨

답변:




7

수학, 12 바이트

Tuples@{##}&

두 개의 문자 목록을 입력으로 사용합니다.


1
동일한 길이 : Tuples@*List또는 임의의 헤드가 허용되는 경우 :Tuples@*f
CalculatorFeline

5

APL (Dyalog) , 4 바이트

,∘.,

온라인으로 사용해보십시오!

, 반음 낮추다

∘. 데카르트

, 연쇄


flatten평평 화가 잘못된 결과를 낳을 것이기 때문에 여기서는 좋은 설명 이라고 생각하지 않습니다. "조임"또는 "순위 감소"또는 이와 유사한 것이 작동해야한다고 생각합니다. (Flattened [1,2] x [1,2]는 [1,1,1,2,2,1,2,2]입니다)
Zacharý

4

루비 , 30 18 바이트

요르단에서 -12 바이트는 사양을 사용하는 방법을 상기시켜줍니다.

문자 목록을 입력으로 사용합니다.

->a,b{a.product b}

온라인으로 사용해보십시오!


1
사양에 따르면 입력은 "두 개의 문자 또는 문자열 목록"이므로 필요하다고 생각하지 않습니다 .chars.
Jordan

1
루비를 말하지 않는 부끄러운 브라우저입니다. 그런 친절한 언어 ..
alexandros84

4

펄 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

자바 스크립트 (ES6), 45 36 34 33 바이트

Firefox가 필요합니다. 두 입력을 모두 문자열 또는 개별 문자의 배열로 사용합니다.

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

시도 해봐

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; 내가 사용중인 방법을 변경 한 후 업데이트하는 것을 잊었습니다.
얽히고 설킨

x+y유효한 출력 형식은?
Neil

@Neil : 그게 내가 원래 가지고 갈 것이지만 테스트 사례에서 유효하지 않은 것으로 보입니다. 그러나 출력 요구 사항을 다시 읽었을 수도 있습니다. 확실하게 설명을 요청합니다.
얽히고 설킨

1
@ alexandros84 : 예, ES6 (+)는 골프를 치르기 위해 멀리 떨어져있을 가능성이 있다면 필수적입니다 function. 나중에 답변에 몇 가지 포인터를 던지지 만 그 동안 편집 기록에서 원래 배열 매핑 솔루션을 살펴보십시오. 당신은 그냥 그것을 찢어 화살표 기능을 "실제"기능으로 바꿀 수 있어야합니다.
얽히고 설킨



2

QBIC , 29 바이트

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

이렇게하면 모든 조합의 2 문자열을 한 줄에 인쇄합니다.

설명

   ;      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

레티 나 , 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η⁺ικ

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 설명 : 변수 θη암시는 두 개의 입력 문자열을 참조하십시오. 그동안 명령은, 첫 번째 입력의 각각의 문자 위에 루프 명령이 루프 변수 연접 제 2 입력의 각각의 문자 위에 매핑 ι맵 변수 κ내재적 별도 라인에 인쇄되어있는 결과를.


이것은 19 바이트 인 것 같습니다.
CalculatorFeline

@CalculatorFeline Charcoal에는 자체 코드 페이지가 있습니다.
Neil



1

C # 7, 78 63 바이트

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

이것은 완전한 프로그램이나 기능이 아닙니다
ASCII 전용

스 니펫이 아닌 전체 프로그램 또는 함수를 작성해야합니다.
Muhammad Salman

방금 변경했습니다. 그러나이 페이지의 많은 답변은 완전한 프로그램이나 기능이 아닙니다. 왜 이것이 하나인지 잘 모르겠습니다.
Dennis_E

btw, 이것이 내가 코드 골프를 좋아하지 않는 이유입니다.
Dennis_E

이것은 함수이므로 출력 문자열을 화면에 쓰지 않고 직접 반환 할 수 있으므로 ~ 20 바이트를 절약 할 수 있다고 생각합니다.
sundar-복 직원 모니카
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.