Corde di Langford


11

Descrizione della sfida

Una stringa di ordine LangfordN è definita come segue:

  • La lunghezza della stringa è uguale a 2*N,
  • La stringa contiene le prime Nlettere dell'alfabeto inglese, ogni lettera appare due volte,
  • Per ogni coppia di lettere uguali, ci sono Mlettere tra loro, dove Mè la posizione di tale lettera dell'alfabeto ( A = 1, B = 2, ..., Z = 26).

Ad esempio, le uniche due possibili stringhe dell'ordine di Langford 3sono BCABACe CABACB. Come puoi vedere, in entrambe queste stringhe c'è una lettera tra due A, due lettere tra Be tre tra C. Dato un numero intero positivo N, genera tutte le stringhe dell'ordine di Langford N(in qualsiasi formato ragionevole: stampale una per una separate da una nuova riga, restituisce un elenco / matrice ...).

Ingressi / uscite di esempio

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

Appunti

  • Le stringhe dell'ordine di Langford Npossono essere prodotte solo quando N ≡ 0 (mod 4)o N ≡ 3 (mod 4),
  • Puoi utilizzare sia lettere minuscole che maiuscole,
  • Puoi usare anche i numeri successivi ( 012...o 123...invece di ABC...)
  • L'ordine delle stringhe in cui dovrebbero apparire come output non è specificato,
  • L'output può essere piuttosto lungo (ad esempio, ci sono oltre 5 trilioni di stringhe di ordine Langford distinte 20), quindi il tuo programma in realtà non ha bisogno di emetterle tutte, ma deve funzionare in teoria (dato tempo e memoria sufficienti).
  • Questa sfida è stata presa da / r / dailyprogrammer , tutto il merito va a / u / XenophonOfAthens

4
C'è una sfida strettamente correlata nella sandbox. Sebbene non sia in alcun modo necessario, di solito è una buona idea e probabilmente educato controllare anche lì per i duplicati.
Martin Ender,

Possiamo semplicemente generare una matrice di numeri?
Leaky Nun,

@LeakyNun: Certo, perché no. Ho aggiornato la descrizione.
shooqie,

1
Mi riferisco a questo (esegui il programma)
Leaky Nun,

Risposte:


3

CJam (23 byte)

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

Demo online . Questo è un blocco anonimo (funzione) che accetta input nello stack e lascia l'output nello stack sotto forma di una matrice di array di numeri interi sequenziali basati su 0.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.