Ihre Aufgabe heute ist es, eine Welle auf eine Reihe von Zahlen anzuwenden. Eine Welle sieht folgendermaßen aus: [1, 0, -1, 0, 1, 0, -1, 0, 1...]
Wenn Sie sie auf ein bestimmtes Array anwenden, müssen Sie die ersten Elemente, die zweiten Elemente usw. addieren.
Etwas präziser:
Ihr Programm oder Ihre Funktion erhält eine Reihe von ganzen Zahlen. Es muss ein Array mit gleicher Größe gedruckt oder zurückgegeben werden 1
, wobei das erste, fünfte, neunte usw. Element des ursprünglichen Arrays, -1
das dritte, siebte, elfte usw. Element des ursprünglichen Arrays und die übrigen Elemente hinzugefügt werden sollte unberührt bleiben.
Es wird garantiert, dass das Eingabearray mindestens ein Element enthält.
Testfälle:
Input | Output
[0] | [1]
[-1] | [0]
[-4, 3, 0, 1, 7, 9, 8, -2, 11, -88] | [-3, 3, -1, 1, 8, 9, 7, -2, 12, -88]
[0, 0, 0, 0, 0] | [1 ,0 ,-1 ,0 ,1]
[1, 1] | [2, 1]
Das ist Code-Golf , der kürzeste Code gewinnt!
Antworten:
Gelee , 5 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
1, 2, 3 ...
oder1, 0, -1, 0 ...
?LOGO , 18 Bytes
Es gibt kein "Online ausprobieren!" Link, da alle Online-LOGO-Interpreter keine Vorlagenliste unterstützen.
Das ist eine Template-Liste (entspricht der Lambda-Funktion in anderen Sprachen).
Verwendung:
(
invoke
ruft die Funktion auf,pr
druckt das Ergebnis)druckt
[-3 3 -1 1 8 9 7 -2 12 -88]
.Erklärung (schon ziemlich verständlich):
quelle
Haskell , 26 Bytes
Probieren Sie es online! (führt alle Testfälle aus)
Erläuterung:
quelle
JavaScript (ES6), 28 Byte
Die Berechnung geht so:
Das letzte Bit, das die Tatsache ausnutzt, dass in JS eine negative Zahl, wenn sie moduliert wird, ihr negatives Vorzeichen behält (dh
-5 % 3 -> -2
anstatt1
wie in Python).quelle
Mathematica,
262322 BytesProbieren Sie es online! (Mathematik)
Hinweis: Der TIO-Link gilt für die 23-Byte-Version, die 22-Byte-Version ist nicht Mathics-kompatibel.
quelle
Python 2 , 40 Bytes
Probieren Sie es online!
quelle
MATL ,
118 BytesProbieren Sie es bei MATL Online!
Erläuterung
quelle
+
in der Erklärung hinzuzufügenGelee , 16 Bytes
Probieren Sie es online!
heh ich bin sicher das ist zu lang
Bearbeiten
Ich weiß, dass eine 5-Byte-Lösung möglich ist, aber mein WLAN scheint mich abzuschneiden, so dass ich morgen Golf spielen werde. Wenn jemand die kurze Jelly-Lösung veröffentlicht, bevor ich Golf spielen kann, ist das in Ordnung für mich. Ich behalte das hier nur als Hinweis darauf,
wie schlimm ich bei Jelly bin. Einanderer Weg, es zu tun. Ich meine, ich könnte nur auf den Link schauen, den Phoenix in den Kommentaren gepostet hat, aber da ich noch lerne, möchte ich nicht auf die Lösung schauen, bis ich es selbst herausgefunden habe. Das könnte mich den Ruf kosten, aber das Lernen ist das, wofür ich hier bin :)))quelle
R ,
2924 BytesProbieren Sie es online!
quelle
Python 2 ,
5042 Bytes8 Bytes gespart dank @Sisyphus!
Probieren Sie es online!
53 Bytes
Probieren Sie es online!
quelle
lambda l:map(sum,zip(l,[1,0,-1,0]*len(l)))
für Python 2Haskell , 26 Bytes
@Mego hat mich zu dieser Lösung geschlagen
Probieren Sie es online!
Darin ist Haskell großartig. Dies deklariert eine punktfreie Funktion, die die Eingabe mit einer unendlichen Liste komprimiert.
Haskell , 56 Bytes
Hier ist eine Lösung, die komplexe Zahlen verwendet. Aufgrund des Imports nicht sehr wettbewerbsfähig, aber trotzdem ziemlich cool.
Probieren Sie es online!
quelle
Mathematica, 19 Bytes
Erläuterung
Hinweis:
i=1
Erscheint außerhalb der Funktion, was gemäß diesem Metakonsens in Ordnung ist .quelle
i
anderer Wert als 1J, 12 Bytes
Probieren Sie es online!
Da der Formoperator von J
$
zyklisch ausgefüllt wird und wir ihn an die Länge#
der Eingabe anpassen, wird genau das getan, was wir wollen, und wir können ihn einfach zur Eingabe hinzufügen]
quelle
C ++,
93858363 Bytes-8 Bytes, danke an dieser Antwort entdeckte ich, dass Lambda-Parameter sein können
auto
und Sie mit dem richtigen Parameter übergeben können, wird es funktionieren-2 Bytes dank Nevay
-2 Bytes dank Zacharý
Ich habe das
vector
Include entfernt. Sie müssen als Argument einen Container übergeben, der die folgenden Bedingungen erfüllt:size
ohne ArgumenteSTL - Container, die die folgenden Bedingungen erfüllen sind
array
,vector
,string
,map
,unordered_map
, und vielleicht andereWenn die Ausgabe durch Ändern von Argumenten nicht zulässig ist, gilt Folgendes:
C ++
112110 Bytesquelle
j%4
2 Bytes speichern.j%4
.Pari / GP , 30 Bytes
Probieren Sie es online!
quelle
Dyalog APL, 13 Bytes
Probieren Sie es online!
Wie?
1 0 ¯1 0
- das Array [1, 0, -1, 0]⍴⍨≢
- Umformen auf die Länge der Eingabe, zyklisch⊢+
- vektorisierte Summe mit der Eingabequelle
Perl 6 , 28 Bytes
Probieren Sie es online!
1+0i, * × i ... *
erzeugt eine unendliche Liste der1, i, -1, -i
in einem Zyklus wiederholten Zahlen . Diese Zahlen werdenZ+
mit der Eingabeliste ($_
) durch Addition ( ) gezippt , und dann werden die realen Komponenten der resultierenden komplexen Zahlen extrahiert (».re
).quelle
D 56 Bytes
Probieren Sie es online!
Dies ist eine Portierung der C ++ - Antwort von HatsuPointerKun. Vergessen Sie sie also nicht!
quelle
Japt ,
1110 BytesNutzt Japts Index-Wrapping.
Probier es aus
Erläuterung
Implizite Eingabe eines Arrays
U
.Karte über das Array.
Zum aktuellen Element hinzufügen ...
Das Element am aktuellen Index (
E
) ...In der Reihe
[1,0,-1,0]
.quelle
Eigentlich 11 Bytes
Probieren Sie es online! (führt alle Testfälle aus)
Erläuterung:
quelle
Pyth , 11 Bytes
Probieren Sie es online!
quelle
.e+b@[1Z_1Z
ss
mite
für -1..e+be^.j)k
schien nicht zu funktionieren, als ich es versuchte.CJam , 15 Bytes
Probieren Sie es online!
quelle
Math.JS , 34 Bytes
Erklärt
Probieren Sie es online!
quelle
8. ,
9663 BytesCode
Dieser Code belässt das resultierende Array unter TOS
Verwendung und Beispiele
Erläuterung
Wir verwenden cos (x), um die richtige Reihenfolge zu erhalten [1,0, -1,0]. Der Index jedes Array-Elements wird mit 90 Grad multipliziert und dann an die cos () -Funktion übergeben, um den gewünschten "Wellenfaktor" zu erhalten, der dem entsprechenden Element hinzugefügt wird.
quelle
C # (.NET Core) , 50 Byte
Probieren Sie es online!
Verwendet ein einfaches Lambda. Ändert das ursprüngliche Array und gibt die Ausgabe über die Referenz zurück.
quelle
05AB1E , 16 Bytes
Probieren Sie es online!
3L2.SR0¸«
ist das kürzeste, was mirsin(x % 4)
in 05AB1E einfällt.quelle
Ruby , 38 Bytes
Probieren Sie es online!
quelle