Cordes de Langford

11

Description du défi

Une chaîne de commande LangfordN est définie comme suit:

  • La longueur de la chaîne est égale à 2*N,
  • La chaîne contient les premières Nlettres de l'alphabet anglais, chaque lettre apparaissant deux fois,
  • Pour chaque paire des mêmes lettres, il y a des Mlettres entre eux, où Mest la position de cette lettre dans l'alphabet ( A = 1, B = 2, ..., Z = 26).

Par exemple, les deux seules chaînes d'ordre Langford possibles 3sont BCABACet CABACB. Comme vous pouvez le voir, dans ces deux chaînes, il y a une lettre entre deux A, deux lettres entre Bet trois lettres entre C. Étant donné un entier positif N, sortez toutes les chaînes d'ordre de Langford N(dans n'importe quel format raisonnable: imprimez-les une par une, séparées par une nouvelle ligne, retournez une liste / un tableau ...).

Exemples d'entrées / sorties

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

Remarques

  • Les chaînes de commande de Langford Nne peuvent être produites que si N ≡ 0 (mod 4)ou N ≡ 3 (mod 4),
  • Vous pouvez utiliser à la fois des minuscules et des majuscules,
  • Vous pouvez également utiliser les numéros suivants ( 012...ou 123...au lieu de ABC...)
  • L'ordre des chaînes dans lesquelles elles doivent apparaître en sortie n'est pas spécifié,
  • La sortie peut être assez longue (par exemple, il y a plus de 5 billions de chaînes de commande Langford distinctes 20), donc votre programme n'a pas besoin de les sortir toutes, mais il doit fonctionner en théorie (avec suffisamment de temps et de mémoire).
  • Ce défi provient de / r / Dailyprogrammer , tout le mérite revient à / u / XenophonOfAthens
shooqie
la source
4
Il y a un défi étroitement lié dans le bac à sable. Bien que cela ne soit en aucun cas requis, c'est généralement une bonne idée et probablement poli d'y vérifier également les doublons.
Martin Ender
Pouvons-nous simplement sortir un tableau de nombres?
Leaky Nun
@LeakyNun: Bien sûr, pourquoi pas. J'ai mis à jour la description.
shooqie
1
Je fais référence à cela (exécutez le programme)
Leaky Nun

Réponses:

3

CJam (23 octets)

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

Démo en ligne . Il s'agit d'un bloc anonyme (fonction) qui prend des entrées sur la pile et laisse des sorties sur la pile sous la forme d'un tableau de tableaux d'entiers séquentiels basés sur 0.

Peter Taylor
la source