String Langford

11

Deskripsi tantangan

Sebuah tali Langford order Ndidefinisikan sebagai berikut:

  • Panjang string sama dengan 2*N,
  • String berisi Nhuruf pertama dari alfabet bahasa Inggris, setiap huruf muncul dua kali,
  • Untuk setiap pasangan huruf yang sama, ada Msurat-surat antara mereka, di mana Mposisi bahwa surat di alfabet ( A = 1, B = 2, ..., Z = 26).

Sebagai contoh, hanya dua untaian urutan Langford yang mungkin 3adalah BCABACdan CABACB. Seperti yang Anda lihat, dalam kedua string ini ada satu huruf antara dua A, dua huruf antara Bdan tiga huruf antara C. Dengan bilangan bulat positif N, hasilkan semua string Langford pesanan N(dalam format apa pun yang masuk akal: cetak satu per satu dipisahkan oleh baris baru, kembalikan daftar / array ...).

Input / output sampel

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

Catatan

  • Langford strings of order Nhanya dapat diproduksi ketika N ≡ 0 (mod 4)atau N ≡ 3 (mod 4),
  • Anda dapat menggunakan huruf besar dan kecil,
  • Anda juga dapat menggunakan nomor berikutnya ( 012...atau 123...bukan ABC...)
  • Urutan string di mana mereka akan muncul karena output tidak ditentukan,
  • Keluaran bisa sangat panjang (misalnya, ada lebih dari 5 triliun urutan Langford yang berbeda 20), sehingga program Anda sebenarnya tidak perlu menampilkan semuanya, tetapi harus bekerja secara teori (diberikan waktu dan memori yang cukup).
  • Tantangan ini telah diambil dari / r / dailyprogrammer , semua kredit diberikan ke / u / XenophonOfAthens
shooqie
sumber
4
Ada tantangan terkait erat di kotak pasir. Meskipun sama sekali tidak diperlukan itu biasanya ide yang bagus dan mungkin sopan untuk memeriksa di sana juga untuk duplikat.
Martin Ender
Bisakah kita hanya menampilkan array angka?
Leaky Nun
@ LeakyNun: Tentu, kenapa tidak. Saya memperbarui deskripsi.
shooqie
1
Saya menyebut ini (menjalankan program)
Leaky Nun

Jawaban:

3

CJam (23 byte)

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

Demo online . Ini adalah blok anonim (fungsi) yang mengambil input pada stack dan meninggalkan output pada stack dalam bentuk array array dari integer berurutan berbasis 0.

Peter Taylor
sumber
2

Brachylog , 43 byte

:1fd.
ybB:1jp.,B:[.]z:2a
:3f-+$_~h?
t:.m~h?

Cobalah online!

Biarawati Bocor
sumber