Tâche
Étant donné une liste d'entiers L et d'un autre entier s , l'objectif est de calculer les sommes par colonne de toutes les tranches de longueur s (potentiellement chevauchantes) de L , tout en se référant à leur position par rapport à L (voir ci-dessous).
Définitions
Les s -longueur (chevauchement) des tranches de la liste L sont toutes les sous- séquences contiguës (sans enveloppe) de L qui sont d' une longueur s .
Afin de déterminer les positions des tranches s par rapport à L , vous pouvez imaginer construire une "échelle", où chaque tranche s i a un décalage de i positions depuis le début.
Spécifications
- s est un nombre entier supérieur à 1 et strictement inférieure à la longueur de L .
- L contiendra toujours au moins 3 éléments.
- Vous pouvez concurrencer dans n'importe quel langage de programmation et pouvez prendre des entrées et fournir des sorties par n'importe quelle méthode standard , tout en prenant note que ces failles sont interdites par défaut. Il s'agit de code-golf , donc la soumission la plus courte (en octets) pour chaque langue l' emporte.
Exemples et cas de test
Voici un exemple travaillé:
[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]
Et quelques autres cas de test:
[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
M. Xcoder
la source
la source
s
est plus grand queL/2
. Peut-être ajouter quelques cas de test supplémentaires lorsque c'est le cas[1, 1, 1, 1, 1, 1, 1], 6 ->
[1, 2, 2, 2, 2, 2, 1] `ou[1, 2, 3, 4, 5, 6, 7, 8, 9], 6 -> [1, 4, 9, 16, 20, 24, 21, 16, 9]
?Réponses:
J ,
11, 98 octets-1 octet grâce aux miles!
Comment ça fonctionne?
L'argument de gauche est s, celui de droite - L
]\
- divise L en sous-listes de longueur s/.
- extrait les diagonales obliques (anti-diagonales)+/
- les additionne[:
- fait une fourchette à partir des verbes ci-dessusVoici un exemple de session J pour le premier cas de test:
Essayez-le en ligne!
la source
/.
, par opposition à la diagonale principale allant de haut à gauche à bas à droite.,/\
par]\
Haskell ,
5956 octetsEssayez-le en ligne!
Définit une fonction
(#)
qui prend une listes
et un nombren
comme arguments.Ceci est basé sur l'observation que pour
s = [1, 2, 3, 4, 5, 6, 7, 8, 9]
etn = 3
est le même que
Pour générer cette liste initialement croissante, puis constante et enfin décroissante, on peut commencer par
qui cède
[1, 2, 3, 4, 5, 4, 3, 2, 1]
. L'ajout enn
tant que contrainte supplémentaire dans l'minimum
expression donne la[1, 2, 3, 3, 3, 3, 3, 2, 1]
réponse de liste correcte pourn = 3
, bien que pourn = 6
(ou en général n'importe quellen > lengths s/2
) la contrainte supplémentairelength s + 1 - n
soit nécessaire:ou plus court:
Pour la multiplication par paire
[1..length s]
est compressée avecs
, et parce quezip
tronque la liste la plus longue à la longueur de la plus courte, la liste infinie[1..]
peut être utilisée:la source
JavaScript (ES6),
656258 octets4 octets enregistrés grâce à @Shaggy
Prend une entrée dans la syntaxe de curry
(a)(n)
.Cas de test
Afficher l'extrait de code
la source
a=>n=>a.map((v,i)=>v*Math.min(++i,n,a.length+1-(n>i?n:i)))
pour 58 octets?Java 8, 83 octets
Ce premier cas de test (et les deux derniers que j'ai ajoutés) m'a foutu plusieurs fois, mais cela fonctionne finalement maintenant ..: D
Modifie le tableau d'entrée au lieu d'en renvoyer un nouveau.
Explication:
Essayez-le en ligne.
la source
05AB1E , 12 octets
Essayez-le en ligne!
la source
MATL , 8 octets
Essayez-le en ligne! Ou vérifiez tous les cas de test .
Explication
Considérez les entrées
[1, 3, 12, 100, 23]
et4
.la source
APL (Dyalog Unicode) ,
1914 octets SBCS-5 grâce à ngn.
Fonction infixe tacite anonyme prenant s comme argument de gauche et L comme argument de droite. Suppose
⎕IO
( I ndex O rigin) être0
tel quel par défaut sur de nombreux systèmes.Essayez-le en ligne!
Explication avec l'exemple de cas
[1,3,12,100,23]
(
…)
Appliquez la fonction tacite anonyme suivante:,/
fenêtres superposées de cette taille;[[1,3,12],[3,12,100],[12,100,23]]
(
…)\
Appliquer cumulativement à cette tacite la fonction tacite anonyme suivante:⊢
le bon argument (le plus)0,
avec un zéro à gaucheLa réduction cumulative signifie que nous insérons la fonction dans chaque "espace" entre les termes successifs, en progressant de droite à gauche. Pour chaque "espace", la fonction supprimera l'argument de gauche mais ajoutera un zéro supplémentaire. En effet, cela ajoute autant de zéros à chaque terme qu'il y a d '"espaces" à sa gauche, donc le premier terme n'a aucun espace, le second en a un et le troisième en a deux:
[[1,3,12],[0,3,12,100],[0,0,12,100,23]]
↑
augmenter le classement en combinant les listes en une seule matrice, en complétant par des zéros;┌ ┐
│1 3 12 0 0│
│0 3 12 100 0│
│0 0 12 100 23│
└ ┘
∘
puis+⌿
additionnez verticalement;[1,6,36,200,23]
la source
⊢,⍨¨0⍴⍨¨⍳∘≢
->{0,⍵}\
+⌿∘↑((0,⊢)\,/)
plus élégant.2{(⊃⌽⍺),⊃⍵}/⊢
->2{⊃¨(⌽⍺)⍵}/⊢
Gelée , 6 octets
Essayez-le en ligne!
Comment ça fonctionne
la source
Japt , 13 octets
Il a fallu beaucoup trop de temps pour que cela fonctionne quand
s
>L/2
!Essayez-le
Explication
la source
s > L/2
! " J'avais exactement la même chose. Les autres cas de test sont faciles, mais le premier (et les deux que j'ai ajoutés à la fin) étaient ennuyeux! .. +1 de ma part!Wolfram Language (Mathematica) , 42 octets
Essayez-le en ligne!
la source
Julia , 41 octets
Essayez-le en ligne!
\
opérateur.a[L=end]
est une alternative plus courte àL=length(a)
.la source
Japt ,
1312 octets-1 octet grâce à @ETHproductions
Essayez-le en ligne!
la source
R ,
5251 octetsEssayez-le en ligne!
Cela équivaut à la réponse de Laikoni .
seq(l)
produit les indices1...length(l)
depuislength(l)>1
(sinon il produirait1...l[1]
). Je l'enregistre sousx
, enregistrez son revers sousy
, et prends le premier élément dey
(length(l)
) pour porter proprement la réponse de Laikoni et enregistrer un octet!Réponse originale, 52 octets
Essayez-le en ligne!
La sortie est
l
multipliée par élément par le minimum des
, l'indice basé sur 1 de l'élémentx
,length(l)-x+1
etlength(L)-s+1
.Ceci est également équivalent à la réponse de Laikoni, en utilisant
L-x
au lieu derev(x)
car il est plus court.la source
APL + WIN, 25 octets
Invite à saisir l’écran de L suivi de s
Explication:
la source
K (oK) , 30 octets
Solution:
Essayez-le en ligne!
Exemple:
Explication:
Ne pense pas que je puisse rivaliser avec J sur celui-ci. Générez une liste de zéros à ajouter et à ajouter à la liste des fenêtres coulissantes, puis résumez:
La répartition est la suivante ... bien que cela semble toujours maladroit.
la source
Husk , 4 octets
Essayez-le en ligne!
Utilise l'idée de la réponse J de Galen Ivanov .
Explication
la source
C (gcc) , 100 octets
Essayez-le en ligne!
la source
Python 2 ,
6866 octets-2 octets grâce à Laikoni
Essayez-le en ligne!
la source
max(i,n-1)
au lieu de[i,n-1][n>i]
.Perl 5 , 63 octets
Essayez-le en ligne!
la source
C (gcc) ,
838179 octetsLa manipulation de la liste comporte essentiellement trois «phases»: montée en puissance, maintien et refroidissement. À mesure que nous avancerons dans la liste, nous augmenterons notre facteur jusqu'à ce que nous atteignions un maximum. Si une série complète de tranches peut entrer dans la liste, ce maximum sera le même que la longueur des tranches. Sinon, ce sera le même que le nombre de tranches qui correspondent. À l'autre extrémité, nous diminuerons à nouveau le facteur, pour atterrir à 1 sur le dernier élément.
La longueur des phases de montée en puissance et de refroidissement qui serre ce plateau est inférieure de un à ce facteur maximum.
Espérons que les boucles non golfées avant de les combiner le rendent plus clair (R = durée de la phase de montée en puissance):
Trois boucles, c'est beaucoup trop, donc décider du facteur basé sur r nous donne une boucle (en utilisant s pour R pour économiser quelques octets):
Essayez-le en ligne!
la source
Perl,
4544 octetsComprend +4 pour
-ai
Notez également que ce code donne 2 avertissements perl au démarrage. Vous pouvez les supprimer au prix d'un coup en ajoutant l'X
optionDonnez la longueur du masque après l'
-i
option et le tableau sur une ligne sur STDIN:Juste le code:
la source
Rubis , 62 octets
Essayez-le en ligne!
Essentiellement un portage de la réponse javascript d' Arnauld , sauf que le besoin
with_index
est beaucoup plus douloureux.Dans le temps qu'il m'a fallu pour décider de soumettre cela, j'ai joué au golf à partir de cette version de 70 octets, qui est plus proche de l'algorithme de Dennis .
la source
Clojure, 72 octets
la source
Pyt , 106 octets
Prend L sur la première ligne comme un tableau et prend s sur la deuxième ligne
Explication:
Essayez-le en ligne!
la source
Python + numpy, 64 octets
Appelez cela avec l comme liste et N comme longueur.
la source