Cuerdas Langford

11

Descripción del desafío

Una cadena de orden de LangfordN se define de la siguiente manera:

  • La longitud de la cadena es igual a 2*N,
  • La cadena contiene las primeras Nletras del alfabeto inglés, cada letra aparece dos veces,
  • Para cada par de las mismas letras, hay Mcartas entre ellos, donde Mes la posición de esa letra del alfabeto ( A = 1, B = 2, ..., Z = 26).

Por ejemplo, las únicas dos posibles cadenas de orden de Langford 3son BCABACy CABACB. Como puede ver, en ambas cadenas hay una letra entre dos A, dos letras entre Btres y tres letras entre ellas C. Dado un entero positivo N, genera todas las cadenas de orden de Langford N(en cualquier formato razonable: imprímalas una por una separadas por una nueva línea, devuelve una lista / matriz ...).

Muestra de entradas / salidas

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

  • Las cadenas de orden de Langford Nsolo se pueden producir cuando N ≡ 0 (mod 4)o N ≡ 3 (mod 4),
  • Puede usar letras minúsculas y mayúsculas,
  • También puede usar números posteriores ( 012...o en 123...lugar de ABC...)
  • El orden de las cadenas en las que deberían aparecer como salida no está especificado,
  • La salida puede ser bastante larga (por ejemplo, hay más de 5 billones de cadenas de orden de Langford distintas 20), por lo que su programa en realidad no necesita generarlas todas, pero tiene que funcionar en teoría (dado el tiempo y la memoria suficientes).
  • Este desafío ha sido tomado de / r / dailyprogrammer , todo el crédito va a / u / XenophonOfAthens
shooqie
fuente
44
Hay un desafío estrechamente relacionado en el sandbox. Si bien de ninguna manera se requiere, generalmente es una buena idea y probablemente sea educado verificar allí también si hay duplicados.
Martin Ender
¿Podemos simplemente generar una matriz de números?
Leaky Nun
@LeakyNun: Claro, por qué no. Actualicé la descripción.
shooqie
1
Me refiero a esto (ejecuta el programa)
Leaky Nun

Respuestas:

3

CJam (23 bytes)

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

Demo en línea . Este es un bloque anónimo (función) que toma la entrada en la pila y deja la salida en la pila en forma de una matriz de matrices de enteros secuenciales basados ​​en 0.

Peter Taylor
fuente