랭 포드 현 26). 예를 들어, 가능한 두 개의

도전 설명

랭 포드 문자열 순서는 N다음과 같이 정의된다 :

  • 문자열의 길이가 같은지 2*N,
  • 문자열에는 N영어 알파벳의 첫 글자가 포함 되며 각 글자는 두 번 나타납니다.
  • 같은 문자의 각 쌍의 경우, 거기에 M그들 사이의 문자가 어디 M알파벳에서 해당 문자의 위치는 ( A = 1, B = 2, ..., Z = 26).

예를 들어, 가능한 두 개의 Langford 순서 문자열 3BCABACCABACB입니다. 보시다시피,이 두 문자열에는 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 기반 순차 정수 배열의 배열 형태로 스택에 출력을 남깁니다.