首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这是一套运动装置吗?

这是一套运动装置吗?
EN

Code Golf用户
提问于 2018-05-24 12:37:28
回答 6查看 1.6K关注 0票数 16

我们都知道,很多运动只影响你身体的一半,所以你必须做两次,每一边一次。这样的练习有两个对口,一个在左边,一个在右边。但是,只要双方的演习顺序一致,就没有必要连续执行两个对应方。在你的锻炼计划中,你也可以在两边之间切换,但是从一边开始一些运动,和另一边开始一些运动是没有意义的。

挑战

练习部分是一个非零整数的列表,它的下半部分由被否定的前半个整数和相同顺序的整数组成,每半个整数的符号相等。运动的前半部分的标志是它的主导面。

练习集为零或多个运动部件,与相同的前导侧串联在一起。

给定一个非零整数的列表作为输入,确定它是否是一个练习集.整数不一定是唯一的。列表的长度不一定相等。

您的解决方案可能不使用任何标准漏洞。输出可以使用任意两个不同的一致值。这是密码-高尔夫,所以最短的解决方案获胜。

示例

[-5, -1, -7, -6, -5, 5, 1, 7, 6, 5]是练习部分的一个例子。前半部分是[-5, -1, -7, -6, -5],后半部分是[5, 1, 7, 6, 5],它是前半部分中的每个整数。另外,前半部分的整数都是相同的符号。这个练习部分的主导部分是-1

[3, 6, 5, -3, -6, -5, 1, 6, 4, 3, -1, -6, -4, -3]是练习集的一个例子。它单独的运动部分是[3, 6, 5, -3, -6, -5][1, 6, 4, 3, -1, -6, -4, -3],它们都有领先的1

尽管[4, -4, -5, 5]只是由有效的运动部分组成,但它并不是一个练习集,因为第一部分,[4, -4],有领先的1,而第二部分,[-5, 5],有领先的side -1

测试用例

有效测试用例:

代码语言:javascript
复制
[]
[1, -1]
[1, -1, 1, -1]
[-6, 6, -5, -4, -3, 5, 4, 3]
[-1, -5, -8, 1, 5, 8, -7, -6, -5, -3, 7, 6, 5, 3]
[-1, -5, -8, 1, 5, 8, -1, 1]

无效测试用例:

代码语言:javascript
复制
[1]
[1, -2]
[1, 2, -3, -1, -2, 3]
[1, 2, 3, -3, -1, -2]
[-1, -5, -8, 1, 5, 8, 7, 6, 5, 3, -7, -6, -5, -3]
[1, 2, 3, 5, 1, 2, 3, 5]
[1, 2, -5, 4, -6, 5, 5, -6]
[1, 2, -1, 3, -2, -3]
[1, -2, 1]
[-1, -1, 1]
[1, -1, 1]
EN

回答 6

Code Golf用户

发布于 2018-05-24 12:58:58

果冻,10字节

代码语言:javascript
复制
ṁṠŒg$+2/FẸ

在网上试试!

票数 4
EN

Code Golf用户

发布于 2018-05-24 14:00:58

JavaScript (ES6),54字节

优化版本,灵感来自丹尼斯的Python回答

返回0或1。

代码语言:javascript
复制
a=>a.map(b=p=x=>b[+(x<0)]+=[x*x,p*(p=x)>0])|b[1]==b[0]

在网上试试!

原始版本,74字节

代码语言:javascript
复制
a=>a.map(x=>b[i^=p*(p=x)<0&&-~(b[i]+=0)]+=[,x*x],b=[p=0,i=0])|b[1]+0==b[0]

在网上试试!

怎么做?

我们将所有运动部件的前半部分存储在b0中,另一半存储在b1中,当符号发生变化时,在b0和b1之间切换。条目被平方以去掉标志。我们以逗号作为每个条目的前缀,以0作为后缀。

这里有一些额外的逻辑来处理“空输入”边缘情况,基本上是免费的(请参阅源代码末尾的注释)。

代码语言:javascript
复制
a =>                    // given the input array a[]
  a.map(x =>            // for each x in a[]:
    b[i ^=              //   access b[i]:
      p * (p = x)       //     we keep track of the previous entry in p
      < 0 &&            //     if p and x have opposite signs:
      -~(b[i] += 0)     //       append a '0' to b[i] and update i: 0 -> 1, 1 -> 0
    ] += [, x * x],     //   append a comma followed by x² to b[i]
    b = [p = 0, i = 0]  //   start with p = 0, i = 0 and b = [0, 0]
  ) |                   // end of map()
  b[1] + 0              // this will append a '0' to b[1] if it was turned into a string
                        // or let it unchanged if it's still equal to zero (integer),
                        // which handles the 'empty input' edge case
  == b[0]               // compare the result with b[0]
票数 3
EN

Code Golf用户

发布于 2018-05-24 14:36:13

Python 2,111个字节

代码语言:javascript
复制
x=input()
o=[];p=[]
for a,b in zip(x,x[1:]):
 if 0<a*x[0]:
	p+=a,-a
	if b*a<0:o+=p[::2]+p[1::2];p=[]
print o==x

在网上试试!

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

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

复制
相关文章

相似问题

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