反向阵列求和


34

您的程序应将数组作为输入。

数组:

  1. 永远是一维的
  2. 只包含整数
  3. 可以为空

程序应反转数组,然后将元素加到原始数组中,例如:

输入: [1, 2, 3]

原版的: [1, 2, 3]

反转: [3, 2, 1]

[1, 2, 3]
 +  +  +
[3, 2, 1]

[1+3, 2+2, 3+1]

输出: [4, 4, 4]


测试用例:

#In             #Out
[8, 92],        [100, 100]
[1, 2, 3],      [4, 4, 4]
[5, 24, 85, 6], [11, 109, 109, 11]
[],             []
[999],          [1998]

这是,最短的代码(以字节为单位)获胜!


J 3个字节。程序是t。t =:+ |。
理查德·多诺万

@RichardDonovan好答案!您能提交一个答案而不是发表评论吗:)
Noah Cristino

Answers:


13

Haskell,20个字节

通过更改为nimi建议的自由点来节省5个字节

zipWith(+)=<<reverse

在线尝试!


4
去pointfree: zipWith(+)=<<reverse
nimi

@nimi Wow我没想到要这么做,但是那很聪明。
小麦巫师

我在哪里放置阵列?我尝试过辩论,并在TIO上进行了输入
Noah Cristino

@NoahCristino我修复了TIO。这是一个无点函数,因此您只需将输入放在函数之后,但是Haskell需要main进行编译。
小麦巫师

3
@maple_shaft:我们=<<从函数monad中使用它,其定义为:(=<<) f g x = f (g x) x。在这里,用infix编写:(zipWith(+) =<< reverse) x-> zipWith(+) (reverse x) x
nimi

11

果冻,2个字节

+U

在线尝试!

要么

+Ṛ

在线尝试! (感谢@Mr。Xcoder的第二个程序)

解释,尽管这很不言自明

+U  Main link
+   Add, vectorizing, 
 U                    the input, reversed

+Ṛ  Main link
+   Add, vectorizing,
 Ṛ                    the input, reversed, without vectorizing (same thing for depth-1 lists)

对于空数组[],则不输出任何内容。那是正确的。果冻对空列表的表示只是一无所有。请注意,Jelly用单个元素表示的列表只是元素本身。附加ŒṘ到代码以查看输出的Python内部表示。


我发现了2个问题。1)在测试[9]时输出18而不是[18],2)在测试时[]不输出任何内容。
诺亚·克里斯蒂诺

@NoahCristino这不是一个完整的程序,答案中已经有对此的解释。
暴民埃里克(Erik the Outgolfer)

所以我想这很好,这就是果冻的输出方式
Noah Cristino

@NoahCristino是的。我在答案的末尾添加了一部分,因此您可以将该原子放在代码的末尾,以查看Python如何打印它。
HyperNeutrino

+Ṛ也可以。
Xcoder先生17年

11

JavaScript(ES6),27个字节

a=>[...a].map(e=>e+a.pop())


哦,伙计,我快到了,但是我不认为要使用传播算子来进行克隆。
里克·希区柯克

您可以为JavaScript添加嵌入式的try吗?
诺亚·克里斯蒂诺


9

Python 2,32字节

lambda l:map(sum,zip(l,l[::-1]))

不包含zip(35个字节)的替代解决方案:

lambda l:map(int.__add__,l,l[::-1])

在线尝试!



7

Japt,7个字节

mÈ+Ug~Y

在线尝试!带有-Q标志以格式化输出数组。

说明

隐式:U=输入数组

通过以下功能映射输入...

+Ug

该值加上输入数组中索引处的值...

~Y

-(index+1),它从数组的末尾获取元素。


1
做得好!我喜欢多输入的东西!
诺亚·克里斯蒂诺

1
我真的很喜欢多输入Japt解释器。不错的工作!
奥利弗·

真的很酷:-)我会将该功能添加到“官方”解释器中,但是对于当前的设计,它有点
不可



6

Python 2中33 32个字节

-1字节感谢@xnor

lambda l:[i+l.pop()for i in l*1]

在线尝试!


通过了我所有测试的好成绩:)
Noah Cristino

多么不寻常的方法。l*1保存一个字节。
xnor

我很难理解标准l*1,任何细节
dhssa

@dhssa l*1复制列表l。如果我们不进行复制,pop()则在for循环中访问元素之前,将其从列表中删除。
ovs '17

感谢您的解释,我现在明白了。了解编码的好技巧。
dhssa


5

C#(.NET Core)61 60字节

-1个字节,感谢TheLethalCoder

a=>a.Reverse().Zip(a,(x,y)=>x+y).ToArray()

在线尝试!

字节数还包括:

using System.Linq;

为了说明-LINQ中的Zip函数采用两个集合,并为所有对应的元素(即)执行给定的函数。两个第一要素在一起,两个第二要素等等。


1
好答案。感谢您对输入的评论。
诺亚·克里斯蒂诺

1
您好,欢迎来到PPCG!您不需要在字节数中尾随半冒号。我相信您可以直接从Zip致电返回集合,因此不需要ToArray()。不错的工作!
TheLethalCoder

@TheLethalCoder谢谢,我添加了ToArray(),因为挑战是关于数组的,所以我希望独立的lambda是array-> array。
GrzegorzPuławski17年




4

[R 17 16字节

-1字节感谢djhurio

rev(l<-scan())+l

从stdin读取;返回向量;numeric(0)是空列表的零长度数字矢量。

在线尝试!


对于空的“数组”,它将返回numeric(0)
Noah Cristino

1
@NoahCristino空载体被表示为numeric(0)在R.
漏嫩

没关系。@LeakyNun
Noah Cristino

1
rev(l<-scan())+l,16个字节?
djhurio '17

根据记录,R + pryr功能的替代方案仅长一个字节:pryr::f(rev(x)+x)
JayCe '18年



3

PowerShell,26字节

($a=$args)|%{+$a[--$i]+$_}

在线尝试!

将输入作为命令行参数。


您可以添加TIO吗?以及这样的名称链接:codegolf.stackexchange.com/a/135427/61877
Noah Cristino

@NoahCristino:这样吗?到目前为止,还没有使用过,所以不知道我做错了什么。顺便说一句,如果您希望人们在他们的答案中使用某种服务,请在任务描述中注明。
乔伊

没关系。不需要它只是使答案具有更高的质量,并且更容易为将来的观众测试。
诺亚·克里斯蒂诺

3

C,49个字节

f(a,n,b)int*a,*b;{for(b=a+n;a<b--;a++)*a=*b+=*a;}

不应该a,n,ba,b,n什么吗?
暴民埃里克(Erik the Outgolfer)

@EriktheOutgolfer不,b不是该函数的参数,只是出于打高尔夫球的原因在其中填充了一个额外的定义。a必须是指向整数的指针,并且n必须是数组中有多少个整数。
orlp

您能添加一个TIO链接吗?
诺亚·克里斯蒂诺

3

PowerShell40 32字节

($n=$args)|%{$n[-++$i]+$n[$i-1]}

在线尝试!

将输入作为单独的命令行参数,允许将其作为PowerShell的本机列表格式之一。然后循环遍历每个元素(即循环遍历索引的一种较短方法),将从后计数(-1索引化)的元素添加到当前元素(0索引化,因此递减)-1)。这些留在管道上,输出是隐式的。

@briantist节省了8个字节


它不输出数组。
诺亚·克里斯蒂诺

1
@NoahCristino PowerShell输入/输出通常很奇怪。它以数组的形式输出,只是没有什么东西捕获该数组,因此,当隐式Write-Output发生时,它会将内容放在stdout的每一行中。例如,您可以在此处看到捕获到的对象确实是一种array类型。
AdmBorkBork

那么就足够好了:)至少尝试过
诺亚·克里斯蒂诺

我对移动的,并且不那么容易考,但不是它缩短1个字节来去除param,然后更换1..$n1..($n=$args)
briantist

@briantist不太好,但是您确实给了我另一种思考方式,节省了一堆字节。谢谢!
AdmBorkBork

3

Java 8,61 57 56 53字节

a->{for(int l=0,r=a.length;l<r;a[l]=a[--r]+=a[l++]);}

-1个字节,并通过@Nevay修复了错误。
-3个字节,感谢@OliverGrégoire

(这是@jkelm的C#答案的端口(并打了4 8字节),但是由于@OliverGrégoire,现在它是一个更短的解决方案。)

说明:

在这里尝试。

该方法修改输入数组以保存字节,因此不需要返回类型。

a->{                    // Method with integer-array parameter and no return-type
  for(int l=0,          //  Left-integer (starting at 0)
          r=a.length;   //  Right-integer (starting at the length of the input-array)
      l<r;              //  Loop as long as left is smaller than right
    a[l]=               //   Change the number at the current left index to:
         a[--r]+=a[l++] //    The number at the right index + itself
                        //    (The += adds the number at the left index also to the right index)
                        //    (And the --/++ increases/decreases the indexes by 1,
                        //     until we've reached the middle of the array)
  );                    //  End of loop
}                       // End of method

1
您可以使用保存1个字节a->{for(int i=0,l=a.length;i<l/2;a[i]=a[l+~i]+=a[i++]);}
涅瓦

1
除了代码对于奇数长度的数组失败1,2,3(返回4,2,4而不是4,4,4)之外,循环还必须运行到2*i<l,而不是i<l/2

@Nevay谢谢。我知道打高尔夫球应该是可能的l-i-1,只是想不出来。
凯文Cruijssen

2
53个字节:a->{for(int l=0,r=a.length;l<r;a[l]=a[--r]+=a[l++]);}
奥利维尔·格雷戈雷

1
@OlivierGrégoire谢谢。而且您的lr对您的实现很有意义,因此我也使用了它们(并添加了说明)。
凯文·克鲁伊森



2

anyfix,3个字节

"U+

TryItOnline上的版本!是anyfix的过时版本,其中包含一些致命错误,例如由于源代码中的错字而无法添加列表。请改用GitHub上的代码。

"U+  Program
"    Duplicate top of stack
 U   Reverse top of stack if it is a list (which it should be...)
  +  Add, vectorizing for lists

2

内姆,2个字节

此函数将输入放在堆栈顶部,将输出放在堆栈顶部。

𝕓𝔻

在线尝试!


是否可以通过实际的Neim代码而不是普通的输入方法来修改输入堆栈?
LiefdeWen

@LiefdeWen是的,这在I / O元发布的默认设置中是允许的。
Okx


2

JavaScript(ES6),34 33字节

@ETHproductions节省了一个字节。

a=>a.map((e,i)=>e+a[a.length+~i])


我喜欢您输入测试用例的方式,+ 2
Noah Cristino

我认为您可以更改-i-1为来节省一个字节+~i
ETHproductions

@ETHproductions,是的,谢谢!
里克·希区柯克


2

PHP,59字节

for(;a&$c=$argv[++$i];)$a[]=$c+$argv[$argc-$i];print_r($a);

从命令行参数获取输入;空输出为空输入

在PHP> 7.0中产生警告。此版本不(60字节):

for(;++$i<$argc;)$a[]=$argv[$i]+$argv[$argc-$i];print_r($a);

好答案!:)
诺亚·克里斯蒂诺
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.