Dizi Toplamını Ters Çevir


34

Programınız girdi olarak bir dizi almalıdır.

Dizi:

  1. Her zaman 1 boyutlu olacak
  2. Sadece tamsayılar içerecektir
  3. Boş olabilir

Program diziyi tersine çevirmeli ve sonra öğeleri orijinali eklemelidir; örneğin:

Giriş: [1, 2, 3]

Orijinal: [1, 2, 3]

ters: [3, 2, 1]

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

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

Çıktı: [4, 4, 4]


Test Durumları:

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

Bu , en kısa kod (bayt cinsinden) kazanır!


J3 bayt. Program t. t = + |.
Richard Donovan

@RichardDonovan Güzel Cevap! Lütfen bir yorum yerine bir cevap olarak gönderebilir misiniz :)
Noah Cristino

Yanıtlar:


13

Haskell , 20 bayt

5 bayt, nimi'nin önerdiği gibi serbest bir noktaya değiştirerek tasarruf sağlar

zipWith(+)=<<reverse

Çevrimiçi deneyin!


4
pointfree gidin: zipWith(+)=<<reverse.
nimi

@nimi Wow Bunu yapmayı düşünmedim ama bu oldukça akıllıca.
Buğday Sihirbazı

Diziyi nereye koyacağım? Argümanları denedim ve TIO'ya giriş yaptım
Noah Cristino

@NoahCristino TIO'yu düzelttim. Bu puansız bir fonksiyondur, bu nedenle sadece Haskell'in mainderlemesi gereken fonksiyondan sonra girişi koyarsınız .
Buğday Sihirbazı

3
@maple_shaft: biz =<<olarak tanımlanan monad işlevini kullanırız (=<<) f g x = f (g x) x. Burada, ekinde yazılmış: (zipWith(+) =<< reverse) x-> zipWith(+) (reverse x) x.
nimi

11

Jöle , 2 byte

+U

Çevrimiçi deneyin!

veya

+Ṛ

Çevrimiçi deneyin! (ikinci program için @Mr. Xcoder teşekkürler)

açıklama, oldukça açıklayıcı olsa da

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

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

Boş diziler için []bu hiçbir şey çıkarmaz. Bu doğru. Jelly'in boş bir listeyi göstermesi sadece hiçbir şey değildir. Jelly'in bir listeyi tek bir elemanla temsil etmesinin sadece elemanın kendisi olduğunu unutmayın. ŒṘÇıktının Python iç gösterimini görmek için koda ekleyin .


2 sayı buldum. 1) Test edildiğinde, [9]bunun yerine 18 [18], 2) test edildiğinde []hiçbir şey çıkarmaz.
Noah Cristino

@NoahCristino Bu tam bir program değil ve cevabında bunun için zaten bir açıklaması var.
Outgolfer Erik,

Sanırım bu gayet iyi, tam olarak Jelly'in çıktıları bu
Noah Cristino

@HayırCristino Evet. Cevabımın sonuna bir parça ekledim, böylece Python'un nasıl basacağını görmek için bu atomu kodun sonuna koyabilirsiniz.
HyperNeutrino

+Ṛde çalışır.
Bay Xcoder,

11

JavaScript (ES6), 27 bayt

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


Oh, dostum, neredeyse oradaydım, ama klonlama yapmak için spread operatörünü kullanmayı düşünmedim.
Rick Hitchcock

Javascript için gömülü ekleyebilir misiniz?
Noah Cristino




7

Japt , 7 bayt

mÈ+Ug~Y

Çevrimiçi deneyin! -Qçıkış dizisini biçimlendirmek için bayrakla işaretleyin.

açıklama

Kapalı: U= giriş dizisi

Girişi aşağıdaki fonksiyonla eşleştirin ...

+Ug

Değer, artı index'deki giriş dizisindeki değer ...

~Y

-(index+1), dizinin sonundaki öğeleri alır.


1
Aferin! Çoklu giriş şeyini seviyorum!
Noah Cristino

1
Çok girişli Japt tercümanını gerçekten seviyorum. İyi iş!
Oliver,

Bu gerçekten ben "resmi" tercümana bu özelliği eklemek istiyorum :-) serin, ama şimdiki tasarımı ile bu sorta uzatılamaz var ...
ETHproductions



6

Python 2 , 33 32 bayt

@Xnor sayesinde -1 bayt

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

Çevrimiçi deneyin!


Bütün sınavlarımı
geçtim

Ne sıradışı bir yöntem. l*1bir bayt kaydeder.
xnor

Par l*1, herhangi bir detaylandırma anlamakta zorluk çekiyorum
dhssa

@dhssa listenin l*1bir kopyasını yapar l. Bir kopya pop()çıkarmazsak, for döngüsüne erişilmeden önce listedeki öğeleri siler.
ovs

Açıklama için teşekkürler, şimdi anladım. kodlama için bilmek iyi bir numara.
dhssa


5

C # (.NET Core) , 61 60 bayt

TheLethalCoder sayesinde -1 bayt

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

Çevrimiçi deneyin!

Bayt sayısı ayrıca şunları içerir:

using System.Linq;

Açıklama için - LINQ'teki zip işlevi iki koleksiyon alır ve karşılık gelen tüm elemanlar için belirli bir işlevi yerine getirir. her iki birinci unsur birlikte, her iki ikinci unsur vb.


1
İyi cevap. Girişle ilgili yorumunuz için teşekkür ederiz.
Noah Cristino

1
Merhaba ve PPCG'ye hoş geldiniz! Bayt sayısında izleyen yarı kolon gerekmez. Koleksiyondan direkt olarak Zipçağrıya dönebileceğinize inanıyorum ToArray(). İyi iş!
TheLethalCoder

@ TheLethalCoder Teşekkürler ve ToArray () 'ı ekledim çünkü zorluk dizilerle ilgili, bu yüzden bağımsız lambda dizisi -> dizi olsun istedim.
Grzegorz Puławski




4

R , 17 16 bayt

Djhurio sayesinde -1 bayt

rev(l<-scan())+l

Stdin'den okur; vektörü döndürür; numeric(0)Boş liste için sıfır uzunluklu sayısal vektördür.

Çevrimiçi deneyin!


Boş bir "dizi" için geri dönernumeric(0)
Noah Cristino

1
@NoahCristino boş bir vektör numeric(0)R olarak temsil edilir .
Leaky Nun

Bu iyi. @LeakyNun
Noah Cristino

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

Kayıt için, bir R + pryr fonksiyonel alternatifi sadece bir bayt daha uzun:pryr::f(rev(x)+x)
JayCe



3

PowerShell , 26 bayt

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

Çevrimiçi deneyin!

Girdiyi komut satırı argümanları olarak alır.


Bir TIO ekleyebilir misin? ve bunun gibi bir ad altında bir link: codegolf.stackexchange.com/a/135427/61877
Noah Cristino

@NoahCristino: Bu gibi mi? Şu ana kadar bu şeyi kullanmadım, ne yanlış yaptığım hakkında hiçbir fikrim yok. Bu arada, kişilerin cevaplarında belirli bir hizmeti kullanmalarını düşünüyorsanız, lütfen görev tanımında belirtiniz.
Joey,

Bu iyi. Bu gerekli değildir, sadece cevapları daha kaliteli hale getirir ve gelecekteki izleyiciler için test etmesi daha kolaydır.
Noah Cristino

3

C, 49 bayt

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

Olmamalı a,n,bolmak a,b,nfalan?
Outgolfer Erik,

@EriktheOutgolfer Hayır, bişlev için bir parametre değil, sadece golf oynamak için doldurulmuş ekstra bir tanım. atamsayılar için bir işaretçi nolmalı ve dizide kaç tane tam sayı olması gerekir.
orlp

Lütfen bir TIO bağlantısı ekler misiniz?
Noah Cristino

3

PowerShell , 40 32 bayt

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

Çevrimiçi deneyin!

Girişi, PowerShell için yerel liste biçiminden biri olarak izin verilen ayrı bir komut satırı argümanı olarak alır. Sonra, her bir elemanın içinden (yani, indeksler arasında daha kısa bir döngü şekli) ilmekler, arkadan sayılan elemanı ( -1indekslenmiş) mevcut elemana ekler ( 0endekslenir, dolayısıyla azalış -1). Bunlar boru hattında bırakılır ve çıktılar örtüktür.

@Briantist sayesinde 8 bayt kaydedildi


bir dizi çıkarmaz.
Noah Cristino

1
@ NoCahino PowerShell giriş / çıkış, genel olarak, tuhaf. Bu olduğu bir dizi olarak çıkışı, sadece hiçbir şey yakalama dizisi var sözü var, ve örtük böylece zaman Write-Outputolur, bu satıra stdout'u bir öğe üzerinde şeyler koyar. Örneğin, burada , yakalandığında nesnenin gerçekten bir arraytür olduğunu görebilirsiniz.
AdmBorkBork

Yeterince iyi sonra :) atleast denedi
Noah Cristino

Mobil canlıydım ve böylece kolayca test edemez, ancak daha kısa 1 bayt kaldırmak değil paramve daha sonra değiştirmek 1..$nile 1..($n=$args)?
briantist

@briantist Pek değil, ama bana bir sürü bayt tasarrufu yaparak, bu konuda farklı bir düşünce tarzı verdiniz. Teşekkürler!
AdmBorkBork

3

Java 8, 61 57 56 53 bayt

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

@Nevay sayesinde -1 bayt ve hata düzeltildi . @ OliverGrégoire
sayesinde -3 bayt .

( Jkelm'in C # cevabının limanıydı (ve 4 8 bayt golf attı ) , ama şimdi @ OliverGrégoire sayesinde daha kısa bir çözüm .)

Açıklama:

Burada dene.

Yöntem, giriş dizisini bayt kaydetmek için değiştirir, bu nedenle bir geri dönüş türüne gerek yoktur.

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
Kullanarak 1 bayt kaydedebilirsiniz a->{for(int i=0,l=a.length;i<l/2;a[i]=a[l+~i]+=a[i++]);}.
Nevay

1
Kodun tek uzunluktaki diziler için başarısız olmasının yanı sıra 1,2,3( 4,2,4bunun yerine döner 4,4,4), döngü 2*i<ldeğil, uzun sürmelidir i<l/2.
Nevay

@ Nevay Teşekkürler. Golf l-i-1
oynamanın

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

1
@ OlivierGrégoire Teşekkürler. Siz lve rsizin uygulamanız için bir anlam ifade ediyor, ben de bunları kullandım (ve bir açıklama ekledim).
Kevin Cruijssen



2

anyfix , 3 bayt

"U+

TryItOnline'daki sürüm! kaynak kodundaki yazım hataları nedeniyle liste ekleyememek gibi birkaç önemli hata içeren herhangi bir ekin eski bir sürümüdür. Bunun yerine GitHub'daki kodu kullanın.

"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 bayt

Bu, yığının üstüne girdi alan ve yığının üstüne çıkan bir işlevdir.

𝕓𝔻

Çevrimiçi deneyin!


Giriş yığınını normal giriş yöntemleri yerine gerçek Neim kodu ile değiştirme izni var mı?
LiefdeWen

@ LiefdeWen Evet, varsayılan olarak G / Ç meta gönderisi için izin verilir.
Okx,

2

Röda , 22 bayt

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

Çevrimiçi deneyin!

Bu, bir diziyi içine alan ve TIO bağlantısının yeni satırlara ayrılmış olarak çıkardığı bir değerler akışını döndüren adsız bir işlevdir.

açıklama

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

Testlerimi geçiyor! Mükemmel cevap.
Noah Cristino

2

JavaScript (ES6), 34 33 bayt

@ETHproductions sayesinde bir bayt kaydedildi.

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


Test sınavlarına nasıl
girdiğine

Sana değiştirerek byte kaydedebilirsiniz düşünüyorum -i-1için +~i.
ETHproductions

@ETHproductions, evet, teşekkürler!
Rick Hitchcock


2

PHP, 59 bayt

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

komut satırı argümanlarından girdi alır; boş girdi için boş çıktı

PHP> 7.0'da bir uyarı verir. Bu sürüm (60 bayt) yok:

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

Güzel cevap! :)
Noah Cristino
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.