Inspiré d' une question à Stack Overflow .
Étant donné un tableau d'entiers non vide x
et un entier positif n
, calculez la somme de chaque bloc glissant de longueur le n
long du tableau x
, en remplissant de manière circulaire les valeurs manquantes à gauche avec des valeurs à droite comme suit:
- le premier bloc contient la première entrée de
x
, précédée parn-1
des entrées décalées circulairement; - le deuxième bloc a les première et deuxième entrées de
x
, précédées parn-2
des entrées décalées circulairement; etc.
Le tableau de sortie y
a la même taille que x
. Il est possible n
de dépasser la longueur de x
, puis les valeurs de x
sont réutilisées plusieurs fois de manière circulaire .
Exemples
Exemple 1 (les valeurs ne sont réutilisées qu'une seule fois)
x = [2, 4, -3, 0, -4]
n = 3
donner en sortie
y = [-2, 2, 3, 1, -7]
où
-2
est la somme du bloc[0, -4, 2]
(les deux premières valeurs proviennent du décalage circulaire)2
est la somme de[-4, 2, 4]
(la première valeur provient du décalage circulaire)3
est la somme de[2, 4, -3]
(aucun décalage circulaire n'est plus nécessaire)1
est la somme de[4, -3, 0]
-7
est la somme de[-3, 0, -4]
.
Exemple 2 (les valeurs sont réutilisées plusieurs fois)
x = [1, 2]
n = 5
donner
y = [7, 8]
où
7
est la somme du bloc[1, 2, 1, 2, 1]
(les quatre premières valeurs ont été réutilisées circulairement)8
est la somme du bloc[2, 1, 2, 1, 2]
(les trois premières valeurs ont été réutilisées circulairement)
Règles supplémentaires
- L'algorithme devrait fonctionner pour les tableaux de taille arbitraire et pour les valeurs entières arbitraires. Il est acceptable si le programme est limité par le type de données ou les restrictions de mémoire; mais les valeurs entières positives et négatives doivent être gérées.
- Les entrées / sorties peuvent être prises / produites par tout moyen raisonnable .
- Les programmes ou fonctions sont autorisés, dans n'importe quel langage de programmation . Les failles standard sont interdites.
- Le code le plus court en octets gagne.
Cas de test
x, n, -> y
[2, 4, -3, 0, -4], 3 -> [-2, 2, 3, 1, -7]
[1, 2], 5 -> [7, 8]
[2], 7 -> [14]
[-5, 4, 0, 1, 0, -10, -4], 4 -> [-19, -15, -5, 0, 5, -9, -13]
[-5, 4, 0, 1, 0, -10, -4], 1 -> [-5, 4, 0, 1, 0, -10, -4]
[-2, -1, 0, 1, 2, 3], 5 -> [4, 3, 2, 1, 0, 5]
[-10, 0, 10], 4 -> [-10, 0, 10]
code-golf
math
arithmetic
array-manipulation
integer
Luis Mendo
la source
la source
Réponses:
Gelée , 5 octets
Essayez-le en ligne!
Comment ça marche
la source
MATL,
111097 octets3 octets économisés grâce à @Luis!
La première entrée est la taille de la fenêtre et la deuxième entrée est le tableau
Essayez-le sur MATL Online
Explication
la source
Mathematica, 29 octets
Ou la même longueur:
la source
CJam (16 octets)
Suite de tests en ligne . Il s'agit d'un bloc (fonction) anonyme qui prend le tableau et la longueur sur la pile et laisse un tableau sur la pile.
Dissection
la source
Haskell, 57 octets
Essayez-le en ligne!
Juste quelques boucles d'index et l'accès à la liste d'entrée aux index modulent la longueur de la liste.
la source
Haskell ,
696564 octetsEssayez-le en ligne! Exemple d' utilisation:
[2, 4, -3, 0, -4] # 3
.Utiliser les entrées
n
réussies au lieu des entrées précédentes pourrait représenter50 à46 octets (se débarrasser de l'inverse au début et à la fin):Essayez-le en ligne!
la source
Japt , 12 octets
Essayez-le en ligne!
TIO ne prend pas en charge le
Ë
, donc le lien TIO ne fonctionnera pas. , Au lieu essayer ici .la source
Pyth ,
1816 octetsSauvegardé 2 octets grâce à @FryAmTheEggman !
Essayez-le ici ou vérifiez tous les cas de test.
Correction de tous les défauts au coût de -6 octets ! Merci beaucoup à Luis de m'avoir fait comprendre la tâche dans le chat.
Explication (à mettre à jour)
la source
Java 8, 102 octets
Lambda (au curry) de
int[]
à lambda deInteger
àint[]
. Attribuer àFunction<int[], Function<Integer, int[]>>
.Essayez-le en ligne
Lambda non golfé
(j % l + l) % l
calcule un reste non négatif pour toutj
. Pris d' ici .la source
C, 91 octets
Essayez-le en ligne!
la source
Octave, 53 octets
Essayez-le en ligne!
imfilter
fonction avec optioncircular
calcule la convolution circulaire au centre de la fenêtre donc le résultat doit être décalé.la source
05AB1E , 10 octets
Essayez-le en ligne!
Explication
la source
Perl 6 ,
4239 octetsEssayez-le en ligne!
Ma première entrée en Perl 6. Peut probablement être amélioré.
la source
->\a,\b{[«+»] map {a.rotate(-$_)},^b}
Notez que ce n'est pas le cas dans ce cas, mais ce serait le cas s'il y avait une autre instance de$b
dans le code.Kotlin ,
141140138 octetsJuste un premier coup
Soumission
Embellie
TryItOnline
Modifications
la source
Röda , 52 octets
Essayez-le en ligne!
Explication:
la source
JavaScript ES6
8078 octets2 octets économisés grâce à Neil
Usage:
la source
,N
regards inutiles pour moi ...Perl 5 , 66 + 1 (-a) = 67 octets
Essayez-le en ligne!
la source
Python 2 ,
6961 octets- 8 octets Merci beaucoup @muru
Essayez-le en ligne!
Explication:
Nous devons d'abord nous assurer qu'il y a suffisamment de chiffres à gauche de la liste d'origine, ceci est obtenu par le
x*n+x
partie.Par exemple
[2,4,-3,0,4],5
:Ensuite, nous inverserons la liste:
Ensuite, nous obtenons des blocs correspondants pour chaque élément par
[len(x)+~i:][:n]
. La tranche sera inversée, c'est-à-dire que 2 gagnera un bloc:[2,-4,0,-3,4]
qui est inverse de l'attendu[4,-3,0,-4,2]
, mais nous avons besoin de la somme après tout. Donc ça marche. :)la source
x[-n+1:]+x*n
devrait vous donner la liste avec un rembourrage suffisant de chaque côté, sans avoir à inverser (lambda x,n:[sum((x[-n+1:]+x*n)[i:i+n])for i in range(len(x))]
)R ,
1019389 octetsEssayez-le en ligne!
la source
K (oK) , 18 octets
Solution:
Essayez-le en ligne!
Exemples:
Explication:
Était sur le point de publier une solution de 31 octets , alors je me suis souvenu que oK avait une fonction intégrée pour les fenêtres coulissantes ...
Prime:
La solution de 31 octets qui fonctionne également en K4 :
la source