Aufgabe
Ausgehend von einer Liste von ganzen Zahlen L und einer anderen ganzen Zahl s besteht das Ziel darin, die spaltenweisen Summen aller (möglicherweise überlappenden) Schichten mit der Länge s von L zu berechnen , während ihre Positionen in Bezug auf L angegeben werden (siehe unten).
Definitionen
Die s- Länge (überlappende) Schichten der Liste L sind alle zusammenhängenden Teilfolgen (ohne Umbruch) von L , die die Länge s haben .
Um die Positionen der Slices s relativ zu L zu bestimmen , können Sie sich vorstellen, eine "Leiter" zu bauen, in der jedes Slice s i von Anfang an einen Versatz von i Positionen hat.
Technische Daten
- s eine ganze Zahl größer als 1 und streng kleiner als die Länge L .
- L enthält immer mindestens 3 Elemente.
- Sie können in jeder Programmiersprache antreten und über jede Standardmethode Eingaben und Ausgaben vornehmen. Beachten Sie jedoch, dass diese Lücken standardmäßig verboten sind. Dies ist Codegolf , daher gewinnt die kürzeste Übermittlung (in Bytes) für jede Sprache .
Beispiele und Testfälle
Hier ist ein Beispiel:
[1, 2, 3, 4, 5, 6, 7, 8, 9], 3
[1, 2, 3]
[2, 3, 4]
[3, 4, 5]
[4, 5, 6]
[5, 6, 7]
[6, 7, 8]
[7, 8, 9]
-------------------------------- (+) | column-wise summation
[1, 4, 9, 12, 15, 18, 21, 16, 9]
Und noch ein paar Testfälle:
[1, 3, 12, 100, 23], 4 -> [1, 6, 24, 200, 23]
[3, -6, -9, 19, 2, 0], 2 -> [3, -12, -18, 38, 4, 0]
[5, 6, 7, 8, 2, -4, 7], 3 -> [5, 12, 21, 24, 6, -8, 7]
[1, 2, 3, 4, 5, 6, 7, 8, 9], 3 -> [1, 4, 9, 12, 15, 18, 21, 16, 9]
[1, 1, 1, 1, 1, 1, 1], 6 -> [1, 2, 2, 2, 2, 2, 1]
[1, 2, 3, 4, 5, 6, 7, 8, 9], 6 -> [1, 4, 9, 16, 20, 24, 21, 16, 9]
code-golf
array-manipulation
subsequence
Mr. Xcoder
quelle
quelle
s
größer ist alsL/2
. Vielleicht noch ein paar Testfälle hinzufügen, in denen dies der Fall ist[1, 1, 1, 1, 1, 1, 1], 6 ->
[1, 2, 2, 2, 2, 1] `oder[1, 2, 3, 4, 5, 6, 7, 8, 9], 6 -> [1, 4, 9, 16, 20, 24, 21, 16, 9]
?Antworten:
J ,
11, 98 Bytes-1 Byte dank Meilen!
Wie es funktioniert?
Das linke Argument ist s, das rechte - L
]\
- teilt L in Unterlisten mit der Länge s/.
- extrahiert die schrägen Diagonalen (Antidiagonalen)+/
- summiert sie auf[:
- macht eine Gabelung aus den oben genannten VerbenHier ist ein Beispiel für eine J-Sitzung für den ersten Testfall:
Probieren Sie es online!
quelle
/.
, im Gegensatz zur Hauptdiagonale von links nach rechts nach oben.,/\
mit]\
Haskell ,
5956 BytesProbieren Sie es online!
Definiert eine Funktion
(#)
die eine Listes
und eine Nummer annimmtn
als Argumente verwendet.Dies basiert auf der Beobachtung, dass für
s = [1, 2, 3, 4, 5, 6, 7, 8, 9]
undn = 3
ist das gleiche wie
Um diese zunächst ansteigende, dann konstante und schließlich absteigende Liste zu generieren, können wir mit beginnen
was ergibt
[1, 2, 3, 4, 5, 4, 3, 2, 1]
. Das Hinzufügen einern
zusätzlichen Einschränkung zumminimum
Ausdruck ergibt die richtige[1, 2, 3, 3, 3, 3, 3, 2, 1]
Listenantwort fürn = 3
, obwohl fürn = 6
(oder allgemein fürn > lengths s/2
) die zusätzliche Einschränkunglength s + 1 - n
erforderlich ist:oder kürzer:
Für die paarweise Multiplikation
[1..length s]
wird mit gezippts
, und dazip
die längere Liste auf die Länge der kürzeren Liste gekürzt wird,[1..]
kann die unendliche Liste verwendet werden:quelle
JavaScript (ES6),
656258 Byte4 Bytes gespart dank @Shaggy
Übernimmt Eingaben in der Currying-Syntax
(a)(n)
.Testfälle
Code-Snippet anzeigen
quelle
a=>n=>a.map((v,i)=>v*Math.min(++i,n,a.length+1-(n>i?n:i)))
für 58 Bytes?Java 8, 83 Bytes
Dieser erste Testfall (und die letzten beiden, die ich hinzugefügt habe) haben mich mehrmals durcheinander gebracht, aber jetzt funktioniert es endlich.: D
Ändert das Eingabearray, anstatt ein neues zurückzugeben.
Erläuterung:
Probieren Sie es online aus.
quelle
05AB1E , 12 Bytes
Probieren Sie es online!
quelle
MATL , 8 Bytes
Probieren Sie es online! Oder überprüfen Sie alle Testfälle .
Erläuterung
Betrachten Sie Eingaben
[1, 3, 12, 100, 23]
und4
.quelle
APL (Dyalog Unicode) ,
1914 Byte SBCS-5 danke an ngn.
Anonyme implizite Infix-Funktion, bei der s als linkes Argument und L als rechtes Argument verwendet werden. Geht davon aus
⎕IO
( I ndex O Rigin) wird0
als Standard auf vielen Systemen ist.Probieren Sie es online!
Erklärung mit Beispielfall
[1,3,12,100,23]
(
…)
Wenden folgende anonyme stillschweigende Funktion an:,/
überlappende Fenster dieser Größe;[[1,3,12],[3,12,100],[12,100,23]]
(
…)\
Kumulativ diese stillschweigende folgende anonyme stillschweigende Funktion anwenden:⊢
das richtige (die meisten) Argument0,
mit einer Null auf der linken SeiteKumulative Reduktion bedeutet, dass wir die Funktion in jeden "Raum" zwischen aufeinanderfolgenden Begriffen einfügen und von rechts nach links arbeiten. Für jedes "Leerzeichen" verwirft die Funktion das linke Argument, fügt jedoch eine zusätzliche Null hinzu. Tatsächlich werden so viele Nullen an jeden Term angehängt, wie links davon "Leerzeichen" stehen, sodass der erste Term null Leerzeichen erhält, der zweite eins und der dritte zwei:
[[1,3,12],[0,3,12,100],[0,0,12,100,23]]
↑
Erhöhen Sie den Rang, indem Sie die Listen in einer einzigen Matrix zusammenfassen und mit Nullen auffüllen.┌ ┐
│1 3 12 0 0│
│0 3 12 100 0│
│0 0 12 100 23│
└ ┘
∘
dann+⌿
summiere vertikal;[1,6,36,200,23]
quelle
⊢,⍨¨0⍴⍨¨⍳∘≢
->{0,⍵}\
+⌿∘↑((0,⊢)\,/)
eleganter.2{(⊃⌽⍺),⊃⍵}/⊢
->2{⊃¨(⌽⍺)⍵}/⊢
Gelee , 6 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Japt , 13 Bytes
Es hat viel zu lange gedauert, bis dies funktionierte, als
s
>L/2
!Versuch es
Erläuterung
quelle
s > L/2
! " Ich hatte genau das gleiche. Die anderen Testfälle sind einfach, aber der erste (und die beiden, die ich am Ende hinzugefügt habe) waren nervig! .. +1 von mir!Wolfram Language (Mathematica) , 42 Byte
Probieren Sie es online!
quelle
Julia , 41 Bytes
Probieren Sie es online!
\
Operator.a[L=end]
ist eine kürzere Alternative zuL=length(a)
.quelle
Japt ,
1312 Bytes-1 Byte dank @ETHproductions
Probieren Sie es online!
quelle
R ,
5251 BytesProbieren Sie es online!
Dies entspricht der Antwort von Laikoni .
seq(l)
produziert die Indizes1...length(l)
seitlength(l)>1
(sonst würde es produzieren1...l[1]
). Ich speichere es alsx
, speichere sein Gegenteil alsy
und nehme das erste Element vony
(length(l)
), um Laikonis Antwort ordentlich zu portieren und ein Byte zu speichern!Ursprüngliche Antwort, 52 Bytes
Probieren Sie es online!
Der Ausgang wird
l
elementweise durch die mindestens multiplizierts
, der 1 basierten Index des Elementsx
,length(l)-x+1
undlength(L)-s+1
.Dies ist auch gleichbedeutend mit Laikonis Antwort und verwendet
L-x
stattrev(x)
wie es kürzer ist.quelle
APL + WIN, 25 Bytes
Fordert zur Eingabe von L gefolgt von s auf
Erläuterung:
quelle
K (oK) , 30 Bytes
Lösung:
Probieren Sie es online!
Beispiel:
Erläuterung:
Glaube nicht, dass ich in dieser Sache mit J mithalten kann . Generieren Sie eine Liste mit Nullen, die an die Liste der Schiebefenster angehängt und ihnen vorangestellt werden sollen, und fassen Sie dann Folgendes zusammen:
Die Aufteilung ist wie folgt ... obwohl sich dies immer noch ungeschickt anfühlt.
quelle
Schale , 4 Bytes
Probieren Sie es online!
Verwendet die Idee aus Galen Ivanovs J-Antwort .
Erläuterung
quelle
C (gcc) , 100 Bytes
Probieren Sie es online!
quelle
Python 2 ,
6866 Bytes-2 Bytes dank Laikoni
Probieren Sie es online!
quelle
max(i,n-1)
statt[i,n-1][n>i]
.Perl 5 , 63 Bytes
Probieren Sie es online!
quelle
C (GCC) ,
838179 BytesGrundsätzlich gibt es drei "Phasen" bei der Bearbeitung der Liste: Hochfahren, Halten und Abkühlen. Wenn wir die Liste durchgehen, werden wir unseren Faktor erhöhen, bis wir ein Maximum erreicht haben. Wenn eine vollständige Reihe von Slices in die Liste passen kann, entspricht dieses Maximum der Länge der Slices. Andernfalls entspricht dies der Anzahl der passenden Slices. Am anderen Ende verringern wir den Faktor erneut, um beim letzten Element auf 1 zu landen.
Die Länge der Hochlauf- und Abkühlphasen, die dieses Plateau belegen, liegt um einen Faktor unter diesem Maximalwert.
Die ungolfed Schleifen vor dem Kombinieren machen es hoffentlich klarer (R = Länge der Hochlaufphase):
Drei Schleifen sind viel zu viel. Wenn Sie also den Faktor basierend auf r bestimmen, erhalten Sie die eine Schleife (verwenden Sie s für R, um einige Bytes zu sparen):
Probieren Sie es online!
quelle
Perl,
4544 BytesEnthält +4 für. Beachten Sie
-ai
außerdem, dass dieser Code beim Start 2 Perl-Warnungen ausgibt. Sie können diese auf Kosten eines Strichs unterdrücken, indem Sie dieX
Option hinzufügenGeben Sie die
-i
Maskenlänge nach der Option und das Array in einer Zeile in STDIN an:Nur der Code:
quelle
Ruby , 62 Bytes
Probieren Sie es online!
Im Grunde genommen eine Portierung von Arnauld's Javascript-Antwort , mit der Ausnahme, dass das Benötigen
with_index
viel schmerzhafter ist.In der Zeit, die ich brauchte, um mich zu entscheiden, dies tatsächlich einzureichen, habe ich mich von dieser 70-Byte-Version verabschiedet, die Dennis 'Algorithmus näher kommt .
quelle
Clojure, 72 Bytes
quelle
Pyt , 106 Bytes
Nimmt L in der ersten Zeile als Array und s in der zweiten Zeile
Erläuterung:
Probieren Sie es online!
quelle
Python + Numpy, 64 Bytes
Nennen Sie dies mit l als Liste und N als Länge.
quelle