兰福德琴弦


11

挑战说明

Langford的字符串的顺序N被定义为如下:

  • 字符串的长度等于2*N
  • 该字符串包含N英语字母的第一个字母,每个字母出现两次,
  • 对于每一对相同的字母,还有M他们之间的信件,其中M是字母的字母表中的位置(A = 1B = 2...Z = 26)。

举例来说,秩序的只有两种可能兰福德字符串3BCABACCABACB。如您所见,在这两个字符串中A,两个之间都有一个字母,两个之间有两个字母,两个之间有B三个字母C。给定一个正整数N,输出所有兰福德顺序的字符串N(以任何合理的格式:用换行符将它们一一打印,返回列表/数组...)。

样本输入/输出

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

笔记

  • 的顺序Langford的串N只能产生时N ≡ 0 (mod 4)或者N ≡ 3 (mod 4)
  • 您可以同时使用小写和大写字母,
  • 您也可以使用后续数字(012...123...代替ABC...
  • 未指定输出时应出现的字符串顺序,
  • 输出可能会很长(例如,有超过5万亿个不同的Langford指令串20),因此您的程序实际上不需要全部输出它们,但是它必须在理论上起作用(给定的时间和内存)。
  • 该挑战来自/ r / dailyprogrammer,所有功劳归于/ u / XenophonOfAthens

4
沙箱中存在一个密切相关的挑战。虽然根本不需要,但这通常是一个好主意,并且有礼貌地检查那里是否有重复项。
马丁·恩德

我们可以只输出数字数组吗?
Leaky Nun

@LeakyNun:当然,为什么不呢。我更新了说明。
shooqie

1
我指的是这个(运行程序)
Leaky Nun

Answers:


3

CJam(23字节)

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

在线演示。这是一个匿名块(函数),它在堆栈上获取输入,并以基于0的顺序整数数组的形式在堆栈上保留输出。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.