Diesmal habe ich eine einfache Herausforderung für dich. Ersetzen Sie bei einem gegebenen Array positiver Ganzzahlen A (oder dem Äquivalent in Ihrer Sprache) jeden Eintrag A i durch die Summe der nächsten A i -Elemente von A und fahren Sie von Anfang an zurück, wenn nicht genügend Elemente vorhanden sind.
Wie üblich können Sie in jeder Programmiersprache antreten und Eingaben und Ausgaben mit jeder Standardmethode und in jedem vernünftigen Format vornehmen. Beachten Sie jedoch, dass diese Lücken standardmäßig verboten sind. Optional können Sie auch die Größe von A als Eingabe verwenden. Dies ist Codegolf , daher gewinnt die kürzeste Übermittlung (in Bytes) für jede Sprache .
Beispiele / Testfälle
Gegeben [1,3,4,5]
, Code sollte eine Ausgabe [3,10,13,14]
, weil 1
durch ersetzt wird 3
, 3
wird ersetzt durch 4+5+1=10
( man beachte , wie es von Anfang an eingewickelt zurück), 4
durch 5+1+3+4=13
und 5
durch 1+3+4+5+1=14
.
Gegeben [3,2,1,9]
, Ihr Programm sollte produzieren [12,10,9,33]
, weil wir 3
mit 2+1+9=12
, 2
mit 1+9=10
, 1
mit 9
und 9
mit ersetzen 3+2+1+9+3+2+1+9+3=33
(beachten Sie, wie wir von Anfang an mehr als einmal zurückgebrochen haben).
Weitere Testfälle zur Auswahl:
[4,3,2,1] -> [10,7,5,4]
[3,2,1,9] -> [12,10,9,33]
[1,3,4,5] -> [3,10,13,14]
[4,4,3,2,2] -> [11,11,8,6,8]
[3,5,3,2,1] -> [10,14,6,4,3]
[3,2,4,3,2,1,1] -> [9,7,7,4,2,1,3]
[7,8,6,5,4,3,2,1,5] -> [29,33,20,15,11,8,6,5,30]
[28,2,4,2,3,2,3,4,5,3] -> [137,6,10,5,9,7,12,38,39,34]
[1,2,3,4,5,4,3,2,1,2,3,4,3,2,1] -> [2,7,13,14,12,8,5,3,2,7,9,7,4,2,1]
quelle
+
am Ende). Vielleicht ninja du mich das nächste Mal. :)Python , 55 Bytes
Probieren Sie es online!
quelle
~
Operator ein bitweises nicht, es ist effektiv eine Abkürzung für-1-v
, also-~v
eine Abkürzung für-(-1-v)
die gerade ist1+v
(aber Klammern wie vermeidet(1+v)*a
). Zweitens kann man in Python eine Liste mit einer ganzen Zahl multiplizieren, um sie zu wiederholen (zB['a','b']*3
ist['a','b','a','b','a','b']
). Das-~v*a
könnte durcha+v*a
dasselbe Byte ersetzt werden. Zuletzt[i:i+v]
ist dies eine Slice-Indizierung, bei der Elemente nuri
miti+v-1
(0-Indizierung) versehen werden.J, 33 Bytes
ungolfed
Erläuterung
Probieren Sie es online!
quelle
C (GCC) ,
8685 BytesProbieren Sie es online!
quelle
for(k=i=0;i++<y[l];)k+=y[(l+i)%c];
C(y,c,l,i,k)
.Haskell,
504744 BytesProbieren Sie es online!
quelle
05AB1E ,
87 BytesProbieren Sie es online!
Erläuterung
quelle
K4 / K (oK) ,
2019 BytesLösung:
Probieren Sie es online!
Beispiele:
Erläuterung:
Formen Sie die Eingabe um, lassen Sie sie zuerst fallen, nehmen Sie jeweils die x-Länge und addieren Sie sie.
quelle
Gelee , 7 Bytes
Probieren Sie es online!
quelle
Attache , 26 Bytes
Probieren Sie es online!
Erläuterung
Dies ist eine Gabelung von zwei Funktionen:
{Sum=>_[(_2+1:_)%#_]}
Iota
Dies bedeutet, dass der rechte Strich
Iota
auf das Argument angewendetx
und als zweites Argument an den mittleren Strich (die erste Funktion) übergeben wird. Also wird dies für die Eingabex
:Ersetzen der in
_
und_2
:Iota[x]
gibt ein Array der Indizes von zurückx
. Es ist gleichbedeutend mit0...#x
.#x
ist eine kurze Beschreibung der Größe vonx
oderSize[x]
. Im Wesentlichen ordnet diese Funktion dieSum
Funktion dem zweiten Ausdruck zu:Das äußere
x[...]
Bit bedeutet, dass...
eine Reihe von Indizes generiert wird, aus denen ausgewählt werden kannx
. Der wichtigste Teil bei der Erstellung der Indizes ist:Dieser Ausdruck verwendet ein wenig Vektorisierung. Nehmen wir zur Veranschaulichung an, die Eingabe ist
x := [1, 3, 4, 5]
. Dann ist dieser Ausdruck äquivalent zu:Dies ist eine Liste von Indizes, die die nächsten
N
Elemente inx
mod darstellen#x
. Um sie für den Abruf sicher zu machen, verwenden wir diesen Array-Mod#x
:Dies gibt uns die richtigen Indizes, die dann erhalten werden
x
und jedes Array wird summiert, was die richtigen Ergebnisse ergibt.Andere Versuche
36 Bytes:
{Sum@_&Get=>((_2+1.._2+_)%#_)}#Iota
- Ich habe diex[...]
Vektorisierung komplett vergessen , so dass:30 bytes:
{Sum=>_[(_2+1.._2+_)%#_]}#Iota
- aber dann wurde mir klar, dass der_2+
innere Bereich herausgerechnet werden konnte, was bedeutet, dass wir Klammern sparen konnten , indem wir:
anstelle von..
die aktuelle Version gaben.quelle
R ,
8964 BytesProbieren Sie es online!
Hauptidee, um einen ausreichend langen Zyklusindexvektor zu generieren, mit dem Sie die erforderlichen Elemente aus dem Eingabevektor abrufen können.
Originalfassung:
Probieren Sie es online!
quelle
R ,
6258 BytesProbieren Sie es online!
Eine Alternative zur anderen R-Lösung . In den Kommentaren erwähnte JayCe,
cumsum
was etwas in meinem Gehirn auslöste, umdiffinv
Matrix-Recycling statt zu verwendenrep
.Erläuterung:
Gegebenes Eingabearray
a
lassenM=max(a)
undl=length(a)
.Beachten Sie, dass
M+l
die maximal mögliche Index wir Zugang bräuchten, und dasM+l<=M*l+1
, denn wennM,l>1
,M+l<=M*l
(mit Gleichheit nur dann , wennM=l=2
) und wennl==1
oderM==1
, dannM+l==M*l+1
.Beispielhaft sei gesagt
a=c(4,3,2,1)
. DannM=l=4
.Wir konstruieren die
M*l+1 x l
Matrix in R durchmatrix(a,max(a)*l+1,l)
. Da Ra
in der Hauptreihenfolge der Spalten recycelt wird, erhalten wir eine Matrix, die die Elemente von wiederholta
als solche :Jede Spalte ist der zyklische Nachfolger jedes Elements von
a
, mita
über die erste Zeile; Dies liegt an der Art und Weise, wie R seine Argumente in einer Matrix wiederverwendet.Als nächstes nehmen wir die inverse "Ableitung"
diffinv
, im wesentlichen die kumulative Summe jeder Spalte mit einer zusätzlichen0
als erste Zeile, die die Matrix erzeugtIn der ersten Spalte ist der Eintrag
6=4+2
gleich14=4 + (3+2+1+4)
, dh die zyklische Nachfolgesumme (CSS) plus eine führende4
. In ähnlicher Weise ist der Eintrag in der zweiten Spalte5=3+2
gleich10=3 + (4+1+2)
und so weiter.In der Spalte
i
ist dera[i]+2
nd-Eintrag also gleichCSS(i)+a[i]
. Daher nehmen wir Zeilen, die durch indiziert sinda+2
, und ergeben eine quadratische Matrix:Die Einträge entlang der Diagonale sind gleich den zyklischen Nachfolgersummen plus
a
, also extrahieren wir die Diagonale und subtrahierena
und geben das Ergebnis als zyklische Nachfolgersummen zurück.quelle
Map
, und ursprünglich war dies wie 68 Bytes, bevor ich herausfand, dass ichl
als Eingabe nehmen könnte !Pyth,
1311 Bytes2 Bytes gespart dank Mr. Xcoder.
Probieren Sie es hier aus
Erläuterung
quelle
Kohle , 12 Bytes
Probieren Sie es online!Link ist eine ausführliche Version des Codes. Erläuterung:
quelle
JavaScript ES6, 65 Byte
Einfache Lösung. Ungolfed:
Die JavaScript-
map()
Funktion ist perfekt für den Job. Sie führt den angegebenen Rückruf für jedes Element aus und ersetzt ihn durch das Ergebnis des Rückrufs. Der Rückruf empfängt zwei Parameter, der erstex
ist der Wert und der zweitey
ist der Index. Durch Ermitteln des Moduls könneni % a.length
wir das Array bei Bedarf problemlos mehrmals durchlaufen.Testschnipsel
(Setzen Sie die Eingabe als JSON-Notation)
Code-Snippet anzeigen
quelle
Java 8, 87 Bytes
Ein Curry-Lambda ohne Inhalt, das eine
int[]
Liste und eineint
Länge annimmt .Probieren Sie es online . Beachten Sie, dass ich
System.out
in diesem Programm einen Shadow erstellt habe , um die Ergebnisse für einen schöneren Ausdruck zu erhalten.quelle
Julia 0,6 ,
635553 BytesProbieren Sie es online!
Ältere Lösung:
Julia 0,6 , 65 Bytes
Probieren Sie es online!
Eine andere Lösung. Von bytecount nicht besonders gut, aber ich mag es und es ist wahrscheinlich effizienter als die anderen beiden, besonders wenn der Eingang große Zahlen enthält.
Julia 0,6 , 69 Bytes
Probieren Sie es online!
quelle
Canvas , 10 Bytes
Probieren Sie es hier aus!
Erläuterung:
quelle
QBasic 1.1 , 115 Bytes
Erste Eingabe ist die Länge L , dann L nachfolgende Eingaben sind die Elemente in der Reihenfolge. L Ausgaben repräsentieren das resultierende Array mit den Elementen in der Reihenfolge, in der sie dargestellt werden.
quelle
Japt, 7 Bytes
Probieren Sie es hier aus
quelle
APL + WIN, 37 Bytes
Eingabeaufforderungen:
Probieren Sie es online! Mit freundlicher Genehmigung von Dyalog Classic
Erläuterung:
quelle
Ruby , 38 Bytes
Probieren Sie es online!
quelle
JavaScript, 65 Bytes 3̶0̶0̶ ̶b̶y̶t̶e̶s̶
Golf gespielt
ungolfed
Probieren Sie es online!
Ich bin neu in dieser Codegolf-Sache!
*aktualisiert! Dank der nützlichen Links in den Kommentaren konnte ich die Größe auf 65 Bytes reduzieren!
quelle
n
) , die wir nicht zulassen. Willkommen bei PPCG :)Perl 5 mit
-M5.010
42 BytesProbieren Sie es online!
quelle
JavaScript, 46 Bytes
Probieren Sie es online aus
quelle
Cjam, 23 Bytes
Probieren Sie es online!
quelle
Pip
-rn
, 14 BytesNimmt Eingabenummern in aufeinanderfolgenden Zeilen von stdin an; gibt Ausgangsnummern in aufeinanderfolgenden Zeilen von stdout aus.Probieren Sie es online!
Erläuterung
Oder anhand eines Beispiels:
quelle
APL (Dyalog Classic) , 12 Byte
Probieren Sie es online!
Verwendet
⎕io←1
quelle
Perl 6 ,
5032 BytesProbieren Sie es online!
Ich bin neu beim Golfen in Perl 6, daher bin ich mir sicher, dass dies kürzer sein kann.Nicht mehr neu und zurück zum Golfen!quelle