给定一个非空字符串(或一个整数,或一个列表/数组(如果您愿意),由范围1-9中的数字组成),您的任务是编写一个函数(或整个程序),该函数从左到右应用"Match-3类型的规则“并输出结果字符串,如下所示:
[parameter] "12223" -> [returned value] "13"这意味着,在从左到右解析字符串时,如果遇到相同的数字连续重复3次或多次,则整个数字组必须“消失”,从而导致其余字符串的左和右部分连接起来。
每次处理组时,必须从左侧重新开始,并重申相同的过程,直到字符串不再更改(通常是当您最终到达右侧时)。
如果该字符串在进程结束时变为空,则应输出一个空字符串,或数字0,或一个您喜欢的空列表/数组。
测试用例:
"1" -> "1"
"31122213" -> "33"
"44555554446" -> "6"
"1322232223222311" -> "1311"
"111" -> ""
"7789998877" -> ""这是密码-高尔夫,所以以字节为单位的最短解决方案获胜。
发布于 2023-02-25 15:41:06
发布于 2023-02-24 16:27:08
-E,18字节:l
s/(.)\1\1+//
tl$ info '(sed)Programming Commands':l # Specify the location of label 'l' for branch commands
s/(.)\1\1+// # Erase the first instance of 3 or more consecutive equal characters
tl # Branch to label only if there has been a succesful 's'ubstitution发布于 2023-02-24 19:25:22
https://codegolf.stackexchange.com/questions/258201
复制相似问题