도전 설명
랭 포드 문자열 순서는 N
다음과 같이 정의된다 :
- 문자열의 길이가 같은지
2*N
, - 문자열에는
N
영어 알파벳의 첫 글자가 포함 되며 각 글자는 두 번 나타납니다. - 같은 문자의 각 쌍의 경우, 거기에
M
그들 사이의 문자가 어디M
알파벳에서 해당 문자의 위치는 (A = 1
,B = 2
,...
,Z = 26
).
예를 들어, 가능한 두 개의 Langford 순서 문자열 3
은 BCABAC
및 CABACB
입니다. 보시다시피,이 두 문자열에는 A
두 개의 문자 사이에 하나의 문자가 있고 두 개의 문자 사이에 두 개의 문자가 B
있고 사이에 세 개의 문자가 C
있습니다. 양의 정수가 주어지면 N
모든 Langford 순서의 문자열을 출력하십시오 N
(합리적인 형식으로 줄 바꿈으로 구분하여 하나씩 인쇄하고 목록 / 배열을 반환하십시오 …).
샘플 입력 / 출력
3: [CABACB, BCABAC]
4: [DACABDCB, BCDBACAD]
5: # no output #
7: [GCFBECBDGFEADA, GBFCBDECGFDAEA, GBDFBCEDGCFAEA, GCAFACDEGBFDBE, GADAFCEDGCBFEB, GACAFDCEGBDFBE, GDAEAFDCGEBCFB, GBDEBFCDGECAFA, EGBFCBEDCGFADA, CGDFCBEDBGFAEA, EGDAFAEDCGBFCB, EGBCFBECDGAFAD, AGABFDBECGDFCE, EGADAFECDGBCFB, AGABEFBCDGECFD, BGDBCEFDCGAEAF, FBGDBCEFDCGAEA, BFGBAEADFCGEDC, CFGACADEFBGDBE, EAGAFBEDBCGFDC, BCGBFCEADAGFED, DAGAFDBECBGFCE, EBGCBFECDAGAFD, CEGDCFBEDBGAFA, CEGBCFBEDAGAFD, BDGBCFDECAGAFE, EFAGACEDFCBGDB, DFAGADEBFCBGEC, AFAGBDEBFCDGEC, DFAGADCEFBCGBE, ECFGBCEBDFAGAD, DEFGADAECFBGCB, CDFGCBDEBFAGAE, EBDGBFEDACAGFC, CDEGCFDAEABGFB, AEAGCDFECBDGBF, FAEAGCDFECBDGB, DFCEGDCBFEBAGA, BFCBGDCEFADAGE, ECFDGCEBDFBAGA, DAFAGDCEBFCBGE, BCFBGCDEAFADGE, AEAFGBDEBCFDGC, ADAFGCDEBCFBGE, AFACEGDCFBEDBG, BFCBEGCDFAEADG, EBFDBGECDFACAG, BEFBCGDECFADAG, EBDFBGEDCAFACG, AEAFCGDECBFDBG, AEADFGCEDBCFBG, ADAEFGDBCEBFCG]
12: # <216288 strings> #
메모
- 순서 랭 포드 문자열
N
만 생산하면 할 수있다N ≡ 0 (mod 4)
거나N ≡ 3 (mod 4)
, - 소문자와 대문자를 모두 사용할 수 있습니다.
- 다음 번호를 사용할 수도 있습니다 (
012...
또는123...
대신ABC...
). - 출력으로 지정해야하는 문자열의 순서는 지정되지 않습니다.
- 출력은 상당히 길 수 있습니다 (예를 들어, 5 조 개 이상의 랭 포드 문자열이
20
있습니다) 프로그램은 실제로 모든 것을 출력 할 필요는 없지만 이론적으로 작동해야합니다 (충분한 시간과 메모리가 주어짐). - 이 과제는 / r / dailyprogrammer 에서 가져 왔으며 모든 크레딧은 / u / XenophonOfAthens로 이동합니다.
답변
CJam (23 바이트)
{,2*e!{__f{\a/1=,(}=},}
온라인 데모 . 익명 블록 (함수)은 스택에 입력을 취하고 0 기반 순차 정수 배열의 배열 형태로 스택에 출력을 남깁니다.