逆配列合計


34

プログラムは、入力として配列を取る必要があります。

配列:

  1. 常に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いいね!コメントの代わりに回答として提出してください:)
ノアクリスティーノ

回答:


13

Haskell、20バイト

nimiが示唆するように、フリーポイントに変更することで5バイト節約

zipWith(+)=<<reverse

オンラインでお試しください!


4
ポイントフリーになりますzipWith(+)=<<reverse
-nimi

@nimiうわー、私はそれをするつもりはなかったが、それはかなり賢い。
小麦ウィザード

配列はどこに配置しますか?引数を試し、TIOに入力しました
ノアクリスティーノ

@NoahCristino TIOを修正しました。これはポイントのない関数なので、関数の後に入力するだけですが、Haskellはmainコンパイルする必要があります。
小麦ウィザード

3
@maple_shaft:次のように=<<定義されている関数モナドから使用します(=<<) f g x = f (g x) x。ここでは、挿入語で書かれています:(zipWith(+) =<< reverse) x-> zipWith(+) (reverse x) x
-nimi

11

ゼリー、2バイト

+U

オンラインでお試しください!

または

+Ṛ

オンラインでお試しください! (2番目のプログラムの@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の表現は、単に何もありません。単一の要素を持つリストのJellyの表現は、単なる要素そのものであることに注意してください。ŒṘコードに追加して、出力のPython内部表現を確認します。


2つの問題が見つかりました。1)テストする[9][18]、ではなく18が出力され、2)テストする[]と何も出力されません。
ノアクリスティーノ

@NoahCristinoそれは完全なプログラムではなく、その答えにはすでに説明があります。
エリックアウトゴルファー

だから私はこれがいいと思う、それはちょうどゼリーがそれを出力する方法です
ノアクリスティーノ

@NoahCristinoうん。答えの最後に一部を追加したので、そのアトムをコードの最後に配置して、Pythonがどのように出力するかを確認できます。
ハイパーニュートリノ

+Ṛも動作します。
ミスターXcoder

11

JavaScript(ES6)、27バイト

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


ああ、私はほとんどそこにいましたが、スプレッド演算子を使用してクローンを作成することは考えていませんでした。
リックヒッチコック

組み込みを追加して、JavaScript用に試してみてください。
ノアクリスティーノ




7

Japt、7バイト

mÈ+Ug~Y

オンラインでお試しください!-Q出力配列をフォーマットするフラグ付き。

説明

暗黙的:U=入力配列

次の関数によって入力をマッピングします...

+Ug

値、およびindexの入力配列の値...

~Y

-(index+1)、配列の最後から要素を取得します。


1
よくやった!複数入力のものが好きです!
ノアクリスティーノ

1
複数入力のJaptインタープリターが本当に好きです。良くやった!
オリバー

それは本当にクールです:-)「公式」インタープリターにその機能を追加しますが、現在のデザインでは拡張不可能です
...-ETHproductions



6

Pythonの233、32バイト

@xnorのおかげで-1バイト

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

オンラインでお試しください!


すべてのテストに合格しました:)
ノアクリスティーノ

なんて珍しい方法だ。l*1バイトを保存します。
-xnor

パーl*1、詳細について理解するのが困難です
-dhssa

@dhssa l*1はリストのコピーを作成しますl。コピーを作成しない場合pop()、forループでアクセスされる前にリストから要素を削除します。
-ovs

説明をありがとう、私は今それを得た。コーディングのために知っておくべき良いトリック。
dhssa


5

C#(.NET Core)61 60バイト

TheLethalCoderのおかげで-1バイト

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

オンラインでお試しください!

バイト数には以下も含まれます。

using System.Linq;

説明-LINQのZip関数は2つのコレクションを取得し、対応するすべての要素に対して指定された関数を実行します。両方の最初の要素、両方の2番目の要素など


1
いい答えだ。入力についてのコメントをありがとう。
ノアクリスティーノ

1
こんにちは、PPCGへようこそ!バイトカウントの末尾のセミコロンは必要ありません。Zip呼び出しから直接コレクションを返すことができると信じていますToArray()。良くやった!
TheLethalCoder

@TheLethalCoderありがとう、ToArray()を追加したのはチャレンジが配列に関するものであるため、自己完結型のラムダを配列->配列にしたかったからです。
グルゼゴルツプワフスキ

4

のために出力さ""れます[]、それは奇妙です。あなたのせいではなく、言語だけ。
ノアクリスティーノ

@NoahCristinoこれはCJamのの表現です[]
エリックアウトゴルファー

うん、多くの言語が特に配列を異なって表示するため、私の挑戦のための標準出力を持つのは難しいです[]、そして[4]、それで問題ありません。
ノアクリスティーノ

4

APL(Dyalog)、3バイト

⌽+⊢

オンラインでお試しください!

説明

          The argument reversed
+           Plus
          The argument

1
忍者。APLキーボードに移動する必要があります... xD
Uriel

@Uriel私は常にAPLキーボードを使用しています:D
Kritixi Lithos

シンプルさが大好きです。これは、出力⌽+⊢入力なしで
ノアCristino

@NoahCristino空の入力は、空のベクトルで指定されます。引数なしで、それはそれ自体で電車を印刷します
KritixiのLithos


4

R17 16バイト

djhurioのおかげで-1バイト

rev(l<-scan())+l

stdinから読み取ります。ベクトルを返します。numeric(0)空リストの長さゼロの数値ベクトルです。

オンラインでお試しください!


空の「配列」の場合は、戻りますnumeric(0)
ノアクリスティーノ

1
@NoahCristino空のベクターは、以下のように表される。numeric(0)R.で
漏洩ヌン

それはいいです。@LeakyNun
ノアクリスティーノ

1
rev(l<-scan())+l, 16 bytes?
djhurio

For the record, an R+pryr functional alternative is just one byte longer: pryr::f(rev(x)+x)
JayCe



3

PowerShell, 26 bytes

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

Try it online!

Takes input as command-line arguments.


Can you add a TIO? and a link under the name like this one: codegolf.stackexchange.com/a/135427/61877
Noah Cristino

@NoahCristino: Like this? Haven't used that thing so far, so no idea what I may have done wrong. By the way, if you expect people to use a certain service in their answers, then please state so in the task description.
Joey

That's fine. It's not required it just makes the answers more high quality, and easier to test out for future viewers.
Noah Cristino

3

C, 49 bytes

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

Shouldn't a,n,b be a,b,n or something?
Erik the Outgolfer

@EriktheOutgolfer No, b isn't a parameter for the function, just an extra definition stuffed in there for golfing reasons. a must be a pointer to integers, and n must be how many integers there are in the array.
orlp

Could you please add a TIO link?
Noah Cristino

3

PowerShell, 40 32 bytes

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

Try it online!

Takes input as individual command-line arguments, which is allowed as one of the native list format for PowerShell. Then loops through each element (i.e., a shorter way of looping through the indices), adding the element counting from the back (-1 indexed) to the current element (0 indexed, hence the decrement -1). Those are left on the pipeline and output is implicit.

Saved 8 bytes thanks to @briantist


it doesn't output an array.
Noah Cristino

1
@NoahCristino PowerShell input/output is, in general, weird. It is outputting as an array, it's just there's nothing capturing said array, and so when the implicit Write-Output happens, it puts things on stdout one item per line. For example, you can see here that, when captured, the object is indeed an array type.
AdmBorkBork

Good enough then :) atleast it tried
Noah Cristino

I'm on mobile and can't test so easily, but isn't it 1 byte shorter to remove the param and then replace 1..$n with 1..($n=$args)?
briantist

@briantist Not quite, but you did give me a different way of thinking about it, saving a bunch of bytes. Thanks!
AdmBorkBork

3

Java 8, 61 57 56 53 bytes

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

-1 byte and bug-fixed thanks to @Nevay.
-3 bytes thanks to @OliverGrégoire.

(It was a port of (and golfed by 4 8 bytes) of @jkelm's C# answer, but now it's a different shorter solution thanks to @OliverGrégoire.)

Explanation:

Try it here.

The method modifies the input-array to save bytes, so no need for a return-type.

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
You can save 1 byte by using a->{for(int i=0,l=a.length;i<l/2;a[i]=a[l+~i]+=a[i++]);}.
Nevay

1
Besides that the code fails for arrays with an odd length 1,2,3 (returns 4,2,4 instead of 4,4,4), the loop has to run as long as 2*i<l, not i<l/2.
Nevay

@Nevay Thanks. I knew it should be possible to golf l-i-1, just couldn't come up with it..
Kevin Cruijssen

2
53 bytes: a->{for(int l=0,r=a.length;l<r;a[l]=a[--r]+=a[l++]);}.
Olivier Grégoire

1
@OlivierGrégoire Thanks. And your l and r makes sense for your implementation, so I've used those as well (and added an explanation).
Kevin Cruijssen



2

anyfix, 3 bytes

"U+

The version on TryItOnline! is an outdated version of anyfix, which contains a few fatal errors such as not being able to add lists because of typos in the source code. Use the code on GitHub instead.

"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

Neim, 2 bytes

This is a function that takes input on the top of the stack and outputs on the top of the stack.

𝕓𝔻

Try it online!


Is it allowed to modify the input stack via actual Neim code instead of normal input methods?
LiefdeWen

@LiefdeWen Yes, that's allowed in the defaults for I/O meta post.
Okx

2

Röda, 22 bytes

{reverse(_)<>_1|[_+_]}

Try it online!

This is an anonymous function that takes in an array and returns a stream of values, which the TIO link outputs separated over newlines.

Explanation

reverse(_)          The array reversed
<>                  interleaved with
_1                  the array itself
                    Push each element to the stream
[_+_]               Pull two values and push their sum

Passes my tests! Great answer.
Noah Cristino

2

JavaScript (ES6), 34 33 bytes

Saved a byte thanks to @ETHproductions.

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


I love how you put in the test cases, +2
Noah Cristino

I think you can save a byte by changing -i-1 to +~i.
ETHproductions

@ETHproductions, yes, thanks!
Rick Hitchcock


2

PHP, 59 bytes

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

takes input from command line arguments; empty output for empty input

Yields a warning in PHP>7.0. This version does not (60 bytes):

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

Nice answer! :)
Noah Cristino
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.