Лэнгфордские струны

11

Описание задачи

Лангфорд строка заказа Nопределяется следующим образом :

  • Длина строки равна 2*N,
  • Строка содержит первые Nбуквы английского алфавита, каждая буква появляется дважды,
  • Для каждой пары одинаковых букв, есть Mбуквы между ними, где Mпозиция этой буквы в алфавите ( A = 1, B = 2, ..., Z = 26).

Например, единственные две возможные последовательности порядка Лэнгфорда - 3это BCABACи CABACB. Как видите, в обеих этих строках есть одна буква между двумя A, две буквы между Bи три буквы между C. Если задано положительное целое число N, выведите все строки порядка Лэнгфорда 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
shooqie
источник
4
В песочнице тесно связана проблема. Хотя это ни в коем случае не требуется, обычно это хорошая идея и, возможно, вежливая проверка на наличие дубликатов.
Мартин Эндер
Можем ли мы просто вывести массив чисел?
Утренняя монахиня
@LeakyNun: Конечно, почему бы и нет. Я обновил описание.
shooqie
1
Я имею в виду это (запустить программу)
Leaky Nun

Ответы:

3

CJam (23 байта)

{,2*e!{__f{\a/1=,(}=},}

Демо онлайн . Это анонимный блок (функция), который принимает входные данные в стеке и оставляет выходные данные в стеке в виде массива массивов последовательных целых чисел от 0.

Питер Тейлор
источник