Langford Saiten

11

Beschreibung der Herausforderung

Eine Langford- Ordnungszeichenfolge Nist wie folgt definiert:

  • Die Länge der Zeichenfolge ist gleich 2*N,
  • Die Zeichenfolge enthält die ersten NBuchstaben des englischen Alphabets, wobei jeder Buchstabe zweimal vorkommt.
  • Für jedes Paar von den gleichen Buchstaben gibt es MBriefe zwischen ihnen, wo Mist Position ist das Buchstabe im Alphabet ( A = 1, B = 2, ..., Z = 26).

Zum Beispiel sind die nur zwei möglichen Langford Saiten Ordnung 3sind BCABACund CABACB. Wie Sie sehen können, gibt es in diesen beiden Zeichenfolgen einen Buchstaben zwischen zwei A, zwei Buchstaben zwischen zwei Bund drei Buchstaben zwischen zwei C. Geben Sie bei einer positiven Ganzzahl Nalle Langford-Zeichenfolgen der Reihenfolge aus N(in einem beliebigen vernünftigen Format: Drucken Sie sie einzeln durch einen Zeilenumbruch getrennt aus und geben Sie eine Liste / ein Array zurück ...).

Beispiel Ein- / Ausgänge

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

Anmerkungen

  • Langford-Ordnungsketten Nkönnen nur hergestellt werden, wenn N ≡ 0 (mod 4)oder N ≡ 3 (mod 4),
  • Sie können sowohl Klein- als auch Großbuchstaben verwenden.
  • Sie können auch nachfolgende Nummern verwenden ( 012...oder 123...anstelle von ABC...)
  • Die Reihenfolge der Zeichenfolgen, in denen sie als Ausgabe angezeigt werden sollen, ist nicht angegeben.
  • Die Ausgabe kann sehr langwierig sein (zum Beispiel gibt es über 5 Billionen verschiedene Langford-Ordnungszeichenfolgen 20), sodass Ihr Programm nicht alle ausgeben muss, sondern theoretisch funktionieren muss (bei genügend Zeit und Speicher).
  • Diese Herausforderung wurde von / r / dailyprogrammer übernommen , alle Gutschriften gehen an / u / XenophonOfAthens
shooqie
quelle
4
Es gibt eine eng verwandte Herausforderung im Sandkasten. Obwohl dies in keiner Weise erforderlich ist, ist es normalerweise eine gute Idee und wahrscheinlich höflich, dort auch nach Duplikaten zu suchen.
Martin Ender
Können wir einfach ein Array von Zahlen ausgeben?
Undichte Nonne
@LeakyNun: Klar, warum nicht. Ich habe die Beschreibung aktualisiert.
Shooqie
1
Ich beziehe mich auf diese (das Programm ausführen)
Leaky Nonne

Antworten:

3

CJam (23 Bytes)

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

Online-Demo . Dies ist ein anonymer Block (Funktion), der Eingaben auf dem Stapel entgegennimmt und Ausgaben auf dem Stapel in Form eines Arrays von Arrays von 0-basierten sequentiellen Ganzzahlen hinterlässt.

Peter Taylor
quelle