编写一个程序,使用游程编码来缩短它必须读取的非负整数的列表。
您可以假设非负整数可以适合32位有符号整数。
第一行列表的长度( n
)。
在第二行,表示整数列表的空格分隔的整数列表.
空格分隔的整数列表。前两个整数代表第一次运行,接下来的两个整数表示第二次运行,依此类推。对于代表运行的每一对整数,第一个整数表示运行的长度,第二个表示运行中整数的值。
1.
5
1 1 3 2 2
2.
3
1 1 1
1.
2 1 1 3 2 2
2.
3 1
0<n<10000
发布于 2011-02-20 15:59:14
这里是我的尝试,这主要是我在发布这个问题之前所做的,尽管出于某种原因,我使用的是文字空间,而不是逗号。
from itertools import*
r=raw_input
r()
for k,g in groupby(r().split()):print len(list(g)),k,
发布于 2011-07-28 18:28:47
def f(s:Seq[_]):String=if(s.isEmpty)""else{val(l,r)=s.span(s.head==);l.size+" "+s.head+" "+f(r)}
readLine
println(f(readLine split' '))
发布于 2011-07-29 13:03:47
这是基于regex解决方案的。实际上,我不知道这在Java中是有效的正则表达式!(Scala的regex是基于Java的)
print("(\\d+)( \\1)*".r.replaceAllIn({readLine;readLine},m=>(m.matched split' 'size)+" "+m.group(1)))
https://codegolf.stackexchange.com/questions/1015
复制相似问题