首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字符串复制器

字符串复制器
EN

Code Golf用户
提问于 2018-01-08 05:55:50
回答 1查看 485关注 0票数 15

在Vim中,可以通过在命令前面加上一个数字来重复一个命令,就像3dd等同于dd dd dd一样。这个重复模式并不局限于Vim命令。字符串也可以以这种方式复制。

Specification:

给定一个字符串,仅由数字、字母字符(大写字符和小写字符)和空格组成,并以可选的尾换行符作为输入,编写一个程序来完成以下工作:

  • 每个“单词”由数字和字母组成。如果一个字母前面有一个数字(一个数字中可能有一个以上的数字,或者这个数字是零),那么在给定的时间重复该字母。例如: a2bc -> 3x1yz -> xxxxyz 10ab0c0d0e -> AAaaAAaa # No 'cde‘,因为有零2A2a2A2a -> AAaaAAaa。
  • 单词被空格隔开。相邻两个单词之间最多有一个空格。

别紧张,对吧?以下是额外的内容:

  • 如果空格前面有一个数字,在给定的时间重复下一个单词。该数字将始终附加到前一个单词的末尾,或字符串的开头。示例: a2bc3 2d -> abbc dd 3 a -> aaa 33a a
  • 如果一个空单词应该重复,不要在一行中输出多个空格。压缩: a3 0x2b -> a b b#而不是a b b,换句话说,您的程序不应该同时输出两个空格。
  • 输入从来不是空的,但是输出不需要是非空的:0 3x -> (空)
  • 输入和输出可以以任何首选的方式进行。从参数中获取输入并通过返回值给出输出的函数也是可以接受的。如果它是一个程序,它不能因错误退出(即返回值为零)。
  • 数字总是十进制,从不以零开头,除非数字本身是零,在这种情况下只有一个零。也就是说,您不需要考虑077a000a作为输入。
  • 所有数字都低于2^31 (2 147 483 648)。最大输出长度小于2^32 (4,294,967,296)字节。
  • 该程序可以选择性地输出一个尾随空间和/或一个尾随换行符。这些空格和换行符不影响输出的有效性。即使正确的输出应该是空的,空格后面的换行符的输出也是合格的。

简而言之,一个有效的输入与这个正则表达式匹配:

代码语言:javascript
复制
([0-9]+ )?([0-9A-Za-z]*[A-Za-z])([0-9]* [0-9A-Za-z]*[A-Za-z])*( ?\n?)

对于有效的输出:

代码语言:javascript
复制
([A-Za-z]+)( [A-Za-z]+)*( ?\n?)

样本测试用例:

代码语言:javascript
复制
abcdefg -> abcdefg
a3bcd -> abbbcd
a3bbbc -> abbbbbc
3a0b -> aaa
abc 3d -> abc ddd
abc3 d -> abc d d d
5 1x5 1y0 z -> x x x x x y y y y y
a999 0x b -> a b
999 0s -> (empty)
0 999s -> (empty)
0 999s4 t -> t t t t
a3 0xc b -> a c c c b
ABC3 abc -> ABC abc abc abc

这是一个密码-高尔夫,所以每种语言中以字节为单位的最短程序获胜!

EN

回答 1

Code Golf用户

发布于 2018-01-10 00:51:16

Lua,113个字节

代码语言:javascript
复制
a="(%d+)(%a)"g=a.gsub function r(c,s)return s:rep(c)end g(g(g(g(...,a,r),"(%d+)( %a*)",r)," +"," "),"%a.*",print)

在网上试试!

票数 0
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/152786

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档