태그 보관물: combinatorics

combinatorics

반복되는 순서 조합 생성 1에서 n 자릿수의 모든 “숫자”를 생성해야합니다. “제로”도

다른 문자의 문자열과 숫자 n이 주어지면 해당 문자를 사용하여 길이가 1에서 n까지의 반복 된 모든 정렬 조합을 생성하십시오.

그것을 정의하는 또 다른 방법은 주어진 문자를 문자 수의 기수 (기수)에서 “사용자 정의”자릿수로 보는 것입니다. 그러면 프로그램은 그 기저에서 1에서 n 자릿수의 모든 “숫자”를 생성해야합니다. “제로”도 포함되어 있습니다.

조합은 길이 (1 문자, 2 등) 순서로 정렬해야하지만, 순서는 상관 없습니다. 입력 및 출력을 처리하는 가장 편리한 방법을 선택할 수 있습니다. 가장 짧은 코드가 승리합니다.

예 :

ab, 3-> a,b,aa,ab,ba,bb,aaa,aab,aba,baa,abb,bab,bba,bbb
0123456789, 2->0,1,2,3,4,5,6,7,8,9,00,01,...,09,10,11,...,99



답변

APL (Dyalog Unicode) , 13 바이트 SBCS

⊃,/,¨∘.,\⎕⍴⊂⍞

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

스캔을 사용하는 기회를 놓치지 마십시오 🙂

“숫자”문자열을 입력 한 다음 n

]boxTIO 에서 활성화하는 방법을 알려 주신 @ Adám에게 감사드립니다.


답변

파이썬 2, 56 바이트

n최대 길이이며 s문자 목록 일 것으로 예상됩니다. n = 0 또는 빈 문자 목록이 유효한 입력 인지는 확실하지 않지만이 함수는 입력을 올바르게 처리합니다.

f=lambda s,n:n*s and s+[x+c for x in f(s,n-1)for c in s]


답변

J, 41 자

   f=.}:@;@({@(,&(<',')@(]#<@[))"1 0>:@i.@])

   'ab' f 3
a,b,aa,ab,ba,bb,aaa,aab,aba,abb,baa,bab,bba,bbb


답변

APL (31)

{,/⍺∘{↓⍉⍺[1+(⍵⍴⍴⍺)⊤⍳⍵*⍨⍴⍺]}¨⍳⍵}

사용법 : 왼쪽 인수는 문자열이고 오른쪽 인수는 숫자입니다.

    'ab'{,/⍺∘{↓⍉⍺[1+(⍵⍴⍴⍺)⊤⍳⍵*⍨⍴⍺]}¨⍳⍵}3
b  a  ab  ba  bb  aa  aab  aba  abb  baa  bab  bba  bbb  aaa

출력은 길이별로 정렬되지만 길이 그룹 내에서 왼쪽으로 하나씩 이동하면 가장 쉽습니다.

설명:

  • ,/⍺∘{}¨⍳⍵: 1..⍵의 경우 ⍺에 함수를 적용하고 결과를 결합합니다.
  • (⍵⍴⍴⍺)⊤⍳⍵*⍨⍴⍺: 1에서 (⍵ = (현재 길이)) ^ (⍴⍺ = (문자 수))까지의 각 숫자에 대해 ⍵ 숫자를 사용하여 기본 base로 변환하십시오.
  • 1+: 배열이 1 인덱싱되므로 하나를 추가하십시오.
  • ⍺[]: 문자열의 인덱스로 사용하십시오.
  • ↓⍉: 행렬을 회전하여 ‘숫자’가 열 대신 행에있는 다음 행렬을 행으로 나눕니다.

답변

하스켈, 34 자

x%n=do k<-[1..n];mapM(\_->x)[1..k]

리스트 모나드의 간단한 사용. 유일한 실제 골프는 수입을 요구 mapM하는 더 관용적 인 (그리고 더 짧은) 대신 사용 replicateM하는 것 Control.Monad입니다.

용법

> "ab" % 3
["a","b","aa","ab","ba","bb","aaa","aab","aba","abb","baa","bab","bba","bbb"]


답변

파이썬, 97 94

from itertools import*
s,n=input()
L=t=[]
exec"t=t+[s];L+=map(''.join,product(*t));"*n
print L

t=t+[s]t+=[s]L과 t가 같은 목록을 가리 키기 때문에 단축 할 수 없습니다 .

입력: 'ab', 3

산출:

['a', 'b', 'aa', 'ab', 'ba', 'bb', 'aaa', 'aab', 'aba', 'abb', 'baa', 'bab', 'bb
a', 'bbb']


답변

매스 매 티카 29 19 28

Join@@(i~Tuples~#&/@Range@n)

용법

i={a, 4, 3.2};n=3;

Join@@(i~Tuples~#&/@Range@n)

{{a}, {4}, {3.2}, {a, a}, {a, 4}, {a, 3.2}, {4, a}, {4, 4}, {4, 3.2}, { 3.2, a}, {3.2, 4}, {3.2, 3.2}, {a, a, a}, {a, a, 4}, {a, a, 3.2}, {a, 4, a}, { a, 4, 4}, {a, 4, 3.2}, {a, 3.2, a}, {a, 3.2, 4}, {a, 3.2, 3.2}, {4, a, a}, {4, a, 4}, {4, a, 3.2}, {4, 4, a}, {4, 4, 4}, {4, 4, 3.2}, {4, 3.2, a}, {4, 3.2, 4}, {4, 3.2, 3.2}, {3.2, a, a}, {3.2, a, 4}, {3.2, a, 3.2}, {3.2, 4, a}, {3.2, 4, 4} , {3.2, 4, 3.2}, {3.2, 3.2, a}, {3.2, 3.2, 4}, {3.2, 3.2, 3.2}}