代码高尔夫: Morris序列

46

挑战

以字符计数最短的代码输出 莫里斯数字序列,也称为 外观数列,序列的前几项如下:

1, 11, 21, 1211, 111221, 312211, ...

你可以无限生成这个序列(也就是说,你不必生成特定数量的数字)。

输入/输出期望

程序不需要接受任何输入(但如果能接受输入并提供从任意起始点或数字开始的选项,则加分)。至少,你的程序必须从 1 开始。

输出至少应该是序列本身:

1
11
21
1211
111221
312211
...

额外加分

如果你想要获得额外的加分,你需要做如下操作:

$ morris 1
1
11
21
1211
111221
312211
...

$ morris 3
3
13
1113
3113
132113
...

1
输入和输出的期望是什么?单个值,单个输出吗?特定次数的迭代? - Mike Clark
1
我认为如果你用“无限地”(模糊、不清楚)替换为“无穷尽地”(无限的,没有边界),它会更清晰。至于关闭问题:习惯就好了。在SO上,“代码高尔夫”问题是一个灰色区域。 - BalusC
3
输出应该是 [13, 1113, 3113...] 还是 [3, 13, 1113, 3113...]? - Instantsoup
@Bart - 我喜欢看到我的帖子被引用!很高兴看到人们仍然在帮助新手。 - Chris Lutz
6
@Nakilon,我想各种不同的方法(如下)并不意味着有多种方法可供选择。感谢您精彩的见解。 - Vivin Paliath
显示剩余9条评论
41个回答

0

Groovy(86个字符),加分项:

def f={m,n->n.times{println m;m=(m=~/(\d)\1*/).collect{it[0].size()+""+it[1]}.join()}}

使用以下方式调用:f(1,10)f(x,n)以获得学分。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接