Langford strings

11

Descrição do Desafio

Uma sequência de pedidos LangfordN é definida da seguinte maneira:

  • O comprimento da string é igual a 2*N,
  • A sequência contém as primeiras Nletras do alfabeto inglês, cada letra aparecendo duas vezes,
  • Para cada par das mesmas letras, há Mcartas entre eles, onde Mé a posição dessa letra do alfabeto ( A = 1, B = 2, ..., Z = 26).

Por exemplo, as únicas duas possíveis sequências de ordem Langford 3são BCABACe CABACB. Como você pode ver, em ambas as cadeias há uma letra entre dois A, duas letras entre B'e três letras entre C' s. Dado um número inteiro positivo N, produza todas as sequências de ordem Langford N(em qualquer formato razoável: imprima-as uma a uma, separadas por uma nova linha, retorne uma lista / matriz ...).

Amostras de entradas / saídas

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> #

Notas

  • As seqüências de ordem Langford Nsó podem ser produzidas quando N ≡ 0 (mod 4)ou N ≡ 3 (mod 4),
  • Você pode usar letras minúsculas e maiúsculas,
  • Você também pode usar números subsequentes ( 012...ou em 123...vez de ABC...)
  • A ordem das seqüências em que elas devem aparecer como saída não é especificada,
  • A saída pode ser bastante longa (por exemplo, existem mais de 5 trilhões de sequências de ordem Langford distintas 20), portanto, seu programa não precisa realmente produzir todas, mas precisa trabalhar na teoria (com tempo e memória suficientes).
  • Este desafio foi retirado de / r / dailyprogrammer , todo o crédito vai para / u / XenophonOfAthens
shooqie
fonte
4
Há um desafio estreitamente relacionado na sandbox. Embora de maneira alguma seja necessário, geralmente é uma boa ideia e provavelmente educado também verificar se há duplicatas.
Martin Ender
Podemos apenas produzir uma matriz de números?
Leaky Nun
@LeakyNun: Claro, por que não. Eu atualizei a descrição.
shooqie
1
Refiro-me a isso (execute o programa) #
Leaky Nun

Respostas:

3

CJam (23 bytes)

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

Demonstração online . Este é um bloco anônimo (função) que recebe entrada na pilha e deixa a saída na pilha na forma de uma matriz de matrizes de números inteiros sequenciais baseados em 0.

Peter Taylor
fonte