挑战说明
甲Langford的字符串的顺序N
被定义为如下:
- 字符串的长度等于
2*N
, - 该字符串包含
N
英语字母的第一个字母,每个字母出现两次, - 对于每一对相同的字母,还有
M
他们之间的信件,其中M
是字母的字母表中的位置(A = 1
,B = 2
,...
,Z = 26
)。
举例来说,秩序的只有两种可能兰福德字符串3
是BCABAC
和CABACB
。如您所见,在这两个字符串中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