首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“糖果粉碎”一根绳子

“糖果粉碎”一根绳子
EN

Code Golf用户
提问于 2023-02-24 14:08:32
回答 13查看 3.3K关注 0票数 24

给定一个非空字符串(或一个整数,或一个列表/数组(如果您愿意),由范围1-9中的数字组成),您的任务是编写一个函数(或整个程序),该函数从左到右应用"Match-3类型的规则“并输出结果字符串,如下所示:

代码语言:javascript
复制
[parameter] "12223" -> [returned value] "13"

这意味着,在从左到右解析字符串时,如果遇到相同的数字连续重复3次或多次,则整个数字组必须“消失”,从而导致其余字符串的左和右部分连接起来。

每次处理组时,必须从左侧重新开始,并重申相同的过程,直到字符串不再更改(通常是当您最终到达右侧时)。

如果该字符串在进程结束时变为空,则应输出一个空字符串,或数字0,或一个您喜欢的空列表/数组。

测试用例:

代码语言:javascript
复制
"1" -> "1"
"31122213" -> "33"
"44555554446" -> "6"
"1322232223222311" -> "1311"
"111" -> ""
"7789998877" -> ""

这是密码-高尔夫,所以以字节为单位的最短解决方案获胜。

EN

回答 13

Code Golf用户

发布于 2023-02-25 15:41:06

Python3.8,67个字节

代码语言:javascript
复制
import re
f=lambda a:(f,str)[a==(b:=re.sub(r"(.)\1\1+","",a,1))](b)

在网上试试!

票数 10
EN

Code Golf用户

发布于 2023-02-24 16:27:08

sed -E,18字节

Arnauld的答案港。

代码语言:javascript
复制
:l
s/(.)\1\1+//
tl

在网上试试!

解释

代码语言:javascript
复制
$ info '(sed)Programming Commands'
代码语言:javascript
复制
: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
票数 8
EN

Code Golf用户

发布于 2023-02-24 19:25:22

维沙尔,9字节

代码语言:javascript
复制
(Ġ:‡ḢḢǑ⟇f

在网上试试!

当你可以做太多的工作时,为什么要使用定点呢?

代码语言:javascript
复制
(         # Over each character
 Ġ        # Group identical items
  :   Ǒ   # Find the first group where...
   ‡--    # Next two as lambda
    ḢḢ    # Removing the first two items yields a truthy result
       ⟇  # Remove the group at the index
        f # Flatten the result.
票数 8
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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