Nous allons plier une liste d'entiers. La procédure à suivre est la suivante. Si la liste est de longueur paire, faites une liste de la moitié de sa longueur où le nième élément de la nouvelle liste est la somme du nième élément de l'ancienne liste et du nième au dernier. dernier élément de l'ancienne liste. Par exemple, si nous avions la liste
[1 2 3 4 5 6 7 8]
Nous le plierions comme ça
[8 7 6 5]
+[1 2 3 4]
__________
[9 9 9 9]
Si la liste est de longueur impaire , pour la plier, nous supprimons d'abord l'élément du milieu, plions-le comme s'il était pair et ajoutons l'élément du milieu au résultat.
Par exemple, si nous avions la liste
[1 2 3 4 5 6 7]
Nous le plierions comme ça
[7 6 5]
+[1 2 3]
__________
[8 8 8]
++ [4]
__________
[8 8 8 4]
Tâche
Écrivez un programme ou une fonction qui prend une liste d'entiers en entrée et sort cette liste pliée.
Il s'agit d'une question de code-golf, donc les réponses seront notées en octets, avec moins d'octets étant mieux.
Exemple d'implémentation
Voici une implémentation dans Haskell qui définit une fonction f
qui effectue un repli.
f(a:b@(_:_))=a+last b:f(init b)
f x=x
la source
Réponses:
Python , 46 octets
Essayez-le en ligne!
Même longueur:
Une solution beaucoup plus courte fonctionne pour les listes de longueur égale (30 octets)
Essayez-le en ligne!
J'essaie toujours de trouver un moyen court de le corriger pour une longueur impaire.
la source
f=lambda l:l[1:]and[l[0]+l.pop()]+f(l[1:])or l
est également de la même longueur ...05AB1E , 5 octets
Code
Utilise l' encodage 05AB1E . Essayez-le en ligne!
Explication
la source
Emojicode , 203 octets
C'était la réponse Emojicode la plus douloureuse au code pour moi. La longueur inutile: /
Essayez-le en ligne!
la source
Japt ,
211816 octetsTestez-le en ligne!
Complètement horribleUn peu moins horrible grâce à @Oliver . BRB après avoir implémenté plus de fonctionnalités intégrées et corrigé quelques bugs ...la source
Gaia , 7 octets
Explication
la source
Mathematica, 88 octets
la source
Mathematica 57 octets
Insère un zéro au milieu, ajoute la liste à son revers et prend la longueur appropriée.
la source
Japt , 12 octets
Essayez-le en ligne! avec l'
-Q
indicateur pour afficher le tableau formaté.Solution alternative, 14 octets
Essayez-le en ligne!
la source
Gelée , 7 octets
Essayez-le en ligne!
-2 grâce à ETHproductions ... et moi le réalisant avant.
la source
JavaScript (Node.js) , 53 octets
Essayez-le en ligne!
Une autre suggestion:
JavaScript (Node.js) , 43 octets
Essayez-le en ligne!
la source
R ,
81706857 octetsEssayez-le en ligne!
fonction anonyme; renvoie le résultat.
la source
Python 3 , 101 octets
Essayez-le en ligne!
la source
Python 3 , 70 octets
Essayez-le en ligne!
la source
JavaScript,
7571 octetsEssayez-le en ligne
Sauvegardé 2 octets grâce à ETHproductions
la source
JavaScript (ES6), 41 octets
Afficher l'extrait de code
la source
MATL , 9 octets
Essayez-le en ligne!
Comment ça marche
Étant donné un tableau
[a b c ... x y z]
,[a z]
appelons le sous- tableau "crust" et[b c ... y z]
le le "core".Le code consiste en une boucle qui supprime la croûte, calcule sa somme et déplace le noyau vers le haut de la pile, prêt pour la prochaine itération. La condition de boucle est le nombre d'éléments dans le sous-tableau central
la source
WendyScript , 72 octets
Essayez-le en ligne!
la source
C # (.NET Core) ,
118111 octetsLe nombre d'octets comprend également
Essayez-le en ligne!
Veuillez saisir des nombres séparés par des virgules (
,
) ou des espaces. Explication:la source
Perl,
4238 caractèressub f {@ a = map {$ + pop} splice @ , 0, @ / 2; @ a, @ }Essayez par exemple comme ceci:
la source
Pyth,
181713 octetsMon approche originale était
-1 octet merci à M. Xcoder
-4 octets grâce à FryAmTheEggman
la source
c2<list>
pour diviser une liste en deux. Une autre commande qui pourrait être utile est.T
.WtQ aY+.)Q.(Q0;+Y
C ++ 17,
757371 octetsEn tant que lambda sans nom, accepter un conteneur comme
vector
oulist
, revient en modifiant l'entrée:Utilisation de l'opérateur bien connu
<--
et du triple plus+++
Non golfé et exemple:
la source
J , 22 octets
Essayez-le en ligne!
la source
APL (Dyalog Unicode) , 21 octets SBCS
-3 octets grâce à @ Adám.
Essayez-le en ligne!
Explication:
la source
+⌿(⌊2÷⍨≢)(↑↑⍮⌽⍤↓)⊢
(⌊2÷⍨≢)(↑{+⌿↑⍺⍵}∘⌽↓)⊢
`Lisp commun, 106 octets
Essayez-le en ligne!
la source
JavaScript (Node.js) , 62 octets
Essayez-le en ligne!
la source
-i-1
par+~i
pour enregistrer un octet.c!=i
avecc>i
pour un octet.Scala, 91 octets
la source
Mathematica , 52
la source
JavaScript (ES6),
4643 octetsAfficher l'extrait de code
Enregistré 3 octets avec l'inspiration d' Asaf .
la source
c+c
fonctionne pour le troisième octet.Java 8, 93 octets
À deux chiffres! Il s'agit d'un lambda qui prend un
int[]
et retourne unint[]
.Lambda non golfé
Assez simple. Il replie la seconde moitié en place sur la première moitié de l'entrée et renvoie une copie de la première moitié uniquement.
Étonnamment, la copie du tableau dans la déclaration de retour semble être le moyen le moins cher de gérer la bizarrerie de l'élément final pour les entrées de longueur impaire.
la source
PHP , 67 octets
Essayez-le en ligne!
la source