J'ai un simple défi pour vous cette fois. Étant donné un tableau d'entiers positifs A (ou l'équivalent dans votre langue), remplacez chaque entrée A i par la somme des éléments A i suivants de A , en revenant depuis le début s'il n'y a pas assez d'éléments.
Comme d'habitude, 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 et dans n'importe quel format raisonnable, tout en prenant note que ces failles sont interdites par défaut. Vous pouvez également prendre la taille de A comme entrée. Il s'agit de code-golf , donc la soumission la plus courte (en octets) pour chaque langue l' emporte.
Exemples / cas de test
Étant donné [1,3,4,5]
, votre code devrait sortir [3,10,13,14]
, car 1
est remplacé par 3
, 3
est remplacé par 4+5+1=10
(remarquez comment il a été renvoyé depuis le début), 4
par 5+1+3+4=13
et 5
par 1+3+4+5+1=14
.
Étant donné [3,2,1,9]
, votre programme devrait produire [12,10,9,33]
, car nous substituons 3
avec 2+1+9=12
, 2
avec 1+9=10
, 1
avec 9
et 9
avec 3+2+1+9+3+2+1+9+3=33
(notez comment nous avons bouclé depuis le début plus d'une fois).
Quelques autres cas de test parmi lesquels vous pouvez choisir:
[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]
la source
+
à la fin). Aussi, peut-être que vous me ninja la prochaine fois. :)Python , 55 octets
Essayez-le en ligne!
la source
~
opérateur n'est pas au niveau du bit, c'est en fait un raccourci pour-1-v
, donc-~v
c'est un raccourci pour-(-1-v)
ce qui est juste1+v
(mais évite les parenthèses comme(1+v)*a
). Deuxièmement, en Python, on peut multiplier une liste par un entier pour la répéter (par exemple,['a','b']*3
est['a','b','a','b','a','b']
). Le-~v*a
pourrait être remplacé para+v*a
pour le même nombre d'octets. Enfin,[i:i+v]
c'est une indexation de tranche, en gardant les élémentsi
ài+v-1
(indexés 0) uniquement.J, 33 octets
non golfé
explication
Essayez-le en ligne!
la source
C (gcc) ,
8685 octetsEssayez-le en ligne!
la source
for(k=i=0;i++<y[l];)k+=y[(l+i)%c];
C(y,c,l,i,k)
.Haskell,
504744 octetsEssayez-le en ligne!
la source
05AB1E ,
87 octetsEssayez-le en ligne!
Explication
la source
K4 / K (oK) ,
2019 octetsSolution:
Essayez-le en ligne!
Exemples:
Explication:
Remodeler l'entrée, déposer d'abord, prendre x longueur de chaque, résumer.
la source
Gelée , 7 octets
Essayez-le en ligne!
la source
Attaché , 26 octets
Essayez-le en ligne!
Explication
Il s'agit d'une fourchette de deux fonctions:
{Sum=>_[(_2+1:_)%#_]}
Iota
Cela signifie que la dent de droite
Iota
est appliquée à l'argumentx
et transmise en tant que deuxième argument à la dent centrale (la première fonction). Cela devient donc, pour l'entréex
:Remplacement de ceux de
_
et_2
:Iota[x]
renvoie un tableau des indices dex
. C'est équivalent à0...#x
.#x
est un moyen court de dire la taille dex
, ouSize[x]
. En substance, cette fonction mappe laSum
fonction sur la deuxième expression:Le
x[...]
bit externe signifie que...
va générer une série d'indices à sélectionnerx
. La partie la plus importante de la génération des indices est la suivante:Cette expression utilise un peu de vectorisation. Pour visualiser cela, supposons que l'entrée soit
x := [1, 3, 4, 5]
. Ensuite, cette expression est équivalente à:Ceci est une liste d'indices qui représentent les
N
éléments suivants des indices dans lex
mod#x
. Pour les rendre sûrs pour la récupération, nous prenons ce mod de tableau#x
:Cela nous donne les indices appropriés, qui sont ensuite obtenus à partir de
x
et chaque tableau est additionné, donnant les résultats appropriés.D'autres tentatives
36 octets:
{Sum@_&Get=>((_2+1.._2+_)%#_)}#Iota
- j'ai oubliéx[...]
vectoriser complètement, donc ça devient:30 octets:
{Sum=>_[(_2+1.._2+_)%#_]}#Iota
- mais ensuite j'ai réalisé que_2+
dans la plage interne pouvait être factorisé, ce qui signifie que nous pouvions enregistrer les parenthèses en utilisant:
au lieu de..
, en nous donnant la version actuelle.la source
R ,
8964 octetsEssayez-le en ligne!
Idée principale pour générer un vecteur d'index de cyclisme assez long que vous pouvez utiliser pour obtenir les éléments nécessaires à partir du vecteur d'entrée.
Version originale:
Essayez-le en ligne!
la source
R ,
6258 octetsEssayez-le en ligne!
Une alternative à l' autre solution de R . Dans les commentaires, JayCe a mentionné
cumsum
ce qui a déclenché quelque chose dans mon cerveau à utiliserdiffinv
et à recycler la matricerep
.Explication:
Étant donné le tableau d'entrée
a
, letM=max(a)
etl=length(a)
.Observez qu'il
M+l
s'agit de l'index maximum possible auquel nous aurions besoin d'accéder, et queM+l<=M*l+1
, puisque siM,l>1
,M+l<=M*l
(avec égalité uniquement quandM=l=2
) et sil==1
ouM==1
alorsM+l==M*l+1
.À titre d'exemple, laissez
a=c(4,3,2,1)
. AlorsM=l=4
.Nous construisons la
M*l+1 x l
matrice dans R parmatrix(a,max(a)*l+1,l)
. Parce que R recyclea
dans l'ordre des colonnes, nous nous retrouvons avec une matrice répétant les élémentsa
comme tels:Chaque colonne est les successeurs cycliques de chaque élément de
a
, avec àa
travers la première ligne; cela est dû à la façon dont R recycle ses arguments dans une matrice.Ensuite, nous prenons la "dérivée" inverse avec
diffinv
, essentiellement la somme cumulée de chaque colonne avec une additionnelle0
comme première ligne, générant la matriceDans la première colonne, entrée
6=4+2
est égale à14=4 + (3+2+1+4)
, qui est la somme des successeurs cycliques (CSS) plus un interligne4
. De même, dans la deuxième colonne, l'entrée5=3+2
est égale à10=3 + (4+1+2)
, etc.Donc, dans la colonne
i
, lea[i]+2
nd entrée est égale àCSS(i)+a[i]
. Par conséquent, nous prenons des lignes indexées para+2
, donnant une matrice carrée:Les entrées le long de la diagonale sont égales aux sommes des successeurs cycliques plus
a
, donc nous extrayons la diagonale et soustrayonsa
, en renvoyant le résultat comme les sommes des successeurs cycliques.la source
Map
, et à l'origine c'était comme 68 octets avant de comprendre que je pouvais prendrel
comme entrée!Pyth,
1311 octetsEnregistré 2 octets grâce à M. Xcoder.
Essayez-le ici
Explication
la source
Fusain , 12 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
la source
JavaScript ES6, 65 octets
Solution simple. Non golfé:
La
map()
fonction JavaScript est parfaite pour le travail, elle exécute le rappel donné contre chaque élément et le remplace par le résultat du rappel. Le rappel reçoit deux paramètres, le premierx
est la valeur et le secondy
est l'index. En prenant le module,i % a.length
nous pouvons facilement faire une boucle sur le tableau, plusieurs fois si nécessaire.Extrait de test
(Mettez l'entrée en notation JSON)
Afficher l'extrait de code
la source
Java 8, 87 octets
Un lambda vide au curry prenant une
int[]
liste et uneint
longueur.Essayez-le en ligne . Notez que j'ai suivi
System.out
ce programme afin d'obtenir des résultats pour une impression plus jolie.la source
Julia 0,6 ,
635553 octetsEssayez-le en ligne!
Solution plus ancienne:
Julia 0,6 , 65 octets
Essayez-le en ligne!
Une autre solution. Pas génial par bytecount, mais j'aime ça, et c'est probablement plus efficace que les deux autres, surtout si l'entrée a de grands nombres.
Julia 0,6 , 69 octets
Essayez-le en ligne!
la source
Toile , 10 octets
Essayez-le ici!
Explication:
la source
QBasic 1.1 , 115 octets
La première entrée est la longueur L , puis les entrées suivantes L sont les éléments dans l'ordre. Les sorties L représentent le tableau résultant, avec les éléments dans l'ordre où ils sont présentés.
la source
Japt, 7 octets
Essayez-le ici
la source
APL + WIN, 37 octets
Invite à saisir:
Essayez-le en ligne! Gracieuseté de Dyalog Classic
Explication:
la source
Rubis , 38 octets
Essayez-le en ligne!
la source
JavaScript, 65 octets 3̶0̶0̶ ̶b̶y̶t̶e̶s̶
golfé
non golfé
Essayez-le en ligne!
(version non golfée ci-dessus) Je suis nouveau dans ce truc de codegolf!
*mis à jour! grâce aux liens utiles fournis dans les commentaires, j'ai réussi à réduire la taille à 65 octets!
la source
n
), ce que nous n'autorisons pas. Bienvenue à PPCG, cependant :)Perl 5 avec
-M5.010
, 42 octetsEssayez-le en ligne!
la source
JavaScript, 46 octets
Essayez-le en ligne
la source
Cjam, 23 octets
Essayez-le en ligne!
la source
Pip
-rn
, 14 octetsPrend les numéros d'entrée sur les lignes successives de stdin; donne les numéros de sortie sur les lignes successives de sortie standard.Essayez-le en ligne!
Explication
Ou, en utilisant un exemple concret:
la source
APL (Dyalog Classic) , 12 octets
Essayez-le en ligne!
les usages
⎕io←1
la source
Perl 6 ,
5032 octetsEssayez-le en ligne!
Je suis nouveau au golf en Perl 6, donc je suis sûr que cela peut être plus court.Ce n'est plus nouveau, et revenons au golf!la source