Défi
On vous donne un tableau d'entiers. Avec un mouvement, vous pouvez augmenter ou diminuer un élément du tableau de 1 . Votre tâche consiste à égaliser le tableau, c'est-à-dire à rendre tous les éléments du tableau égaux en effectuant quelques mouvements . Mais ça ne suffit pas! Vous souhaitez également effectuer le moins de mouvements possible .
Contribution
- Un tableau non vide d'entiers
- Facultativement, la longueur d' .
Sortie
- Le nombre minimum de mouvements nécessaires pour égaliser le tableau .
Règles
- Les règles standard pour les soumissions valides , les E / S , les échappatoires s'appliquent.
- Il s'agit de code-golf , donc la solution la plus courte (en octets) l'emporte. Comme d'habitude, ne laissez pas les solutions ridiculement courtes dans les langues de golf vous décourager de poster une réponse plus longue dans la langue de votre choix.
- Ce n'est pas une règle, mais votre réponse sera mieux reçue si elle comprend un lien pour tester la solution et une explication de son fonctionnement.
Exemples
Input --> Output
[10] --> 0
[-1, 0, 1] --> 2
[4, 7] --> 3
[6, 2, 3, 8] --> 9
[5, 8, 12, 3, 2, 8, 4, 5] --> 19
[1,10,100] --> 99
la source
Median
est un peu trop difficile pour certaines langues ésotériques.JavaScript (Node.js) ,
5048 octetsEnregistré 2 octets grâce à Arnauld
Essayez-le en ligne!
Triez le tableau par ordre croissant puis additionnez:
la source
a=>a.sort((x,y)=>x-y).map(n=>r+=a.pop()-n,r=0)|r
.05AB1E , 4 octets
Essayez-le en ligne!
Explication
la source
ZL€αOW
était ma tentative ._.Perl 6 ,
2928 octets-1 octet grâce à nwellnhof
Essayez-le en ligne!
Explication
la source
X-
opérandes pour enregistrer un octet.Japt, 7 octets
Essayez-le
Explication
la source
JavaScript (ES6),
605655 octets1 octet enregistré grâce à @Shaggy
Essayez-le en ligne!
Comment?
Sauf s'il me manque une astuce, le calcul de la médiane dans JS s'avère plus long. Probablement environ 65 octets en raison du rappel requis pour
sort()
contourner le tri lexicographique par défaut et plutôt longMath.abs()
:Au lieu de cela, nous essayons toutes les valeurs du tableau d'origine comme valeur d' égalisation .
la source
r
dans le premiermap
.Haskell , 34 octets
Essayez-le en ligne!
Recherche la distance totale de tous les éléments à la médiane, testant chaque élément de la liste comme médiane potentielle et prenant le plus petit résultat.
la source
Gelée , 4 octets
Essayez-le en ligne!
Comment ça marche
la source
Python 2 , 46 octets
Essayez-le en ligne!
Prend la longueur
n
de la liste comme argument. Calcule la moitié supérieure moins la somme inférieure en découpant la liste triée en premièren/2
et dernièren/2
éléments.L'expression
l[-~n/2:l.sort()]
est équivalente à l'informatiquel.sort()
, qui modifie la liste en place, puis le faitl[-~n/2:None]
, où le découpage de la liste ignore la limite supérieure deNone
cellel.sort()
produite. Il peut sembler que la liste a été triée trop tard pour être tranchée correctement, mais Python semble évaluer les arguments de tranche avant de "verrouiller" la liste à trancher.Python 2 , 47 octets
Essayez-le en ligne!
La méthode ennuyeuse pour additionner la distance de chaque valeur à la médiane. Prend la longueur
n
comme argument.Python , 51 octets
Essayez-le en ligne!
Trie la liste en place, puis ajoute à plusieurs reprises la dernière entrée (la plus élevée restante) moins la première entrée (la plus faible restante), et revient sur la liste sans ces éléments jusqu'à ce qu'il ne reste que 0 ou 1. Usages
pop
ont la même longueur:l.pop()-l.pop(0)+f(l)
.Le
l.sort()
est coincé dans un endroit oùNone
il revient n'a aucun effet. La tranchel[None:1]
est la même quel[:1]
parce queNone
s dans les tranches est ignoré.Python , 54 octets
Essayez-le en ligne!
Une compréhension de liste mignonne qui ignore l'argument itéré et modifie la liste en place en sautant à plusieurs reprises les premier et dernier éléments. Nous nous assurons que la compréhension de la liste est effectuée plusieurs
len(l)//2
fois en itérant sur tous les autres éléments dul
saut du premier, terminé avecl[1::2]
. Lel.sort()
producteurNone
peut être bloqué dans l'argument de fin de tranche inutilisé.la source
APL (Dyalog), 12 octets
Brute les forces en testant chaque nombre comme égaliseur. Je ne sais pas si tacite est plus courte, mais je ne peux pas le comprendre.
TIO
la source
TI-Basic,
186 octets-12 octets de Misha Lavrov (je n'ai pas utilisé TI-Basic depuis un moment et j'ai oublié que ses listes peuvent le faire)
TI-Basic est un langage tokenisé . Tous les jetons utilisés dans cette réponse sont d'un octet.
Prend l'entrée comme
{1,2,3,4}:prgmNAME
Fondamentalement, la même idée que la plupart des autres réponses: soustraire par la médiane, puis prendre la somme.
Explication:
la source
sum(abs(Ans-median(Ans
fonctionne également. (Et "TI-84 Plus CE" semble trop spécifique; cela fonctionnera au moins sur n'importe quelle calculatrice de la série 83, et probablement aussi les 73 et 82.)Röda , 33 octets
Essayez-le en ligne!
Explication:
la source
R , 29 octets
Essayez-le en ligne!
la source
Attaché , 18 octets
Essayez-le en ligne!
Explication
la source
J , 15 octets
Essentiellement la même que la solution Japt de Shaggy.
Essayez-le en ligne!
Comment ça marche?
|@-/~"{
- crée un tableau/~
des différences absolues|@-
de chaque nombre par rapport à tous les autres"{
1#.
somme chaque ligne[:<./
trouve le plus petit article (réduire au minimum)la source
Fusain ,
1611 octetsEssayez-le en ligne! Le lien est vers la version détaillée du code. Edit: 5 octets enregistrés grâce à @Arnauld. Explication:
la source
Visual C #, 138 octets
non golfé:
Essayez-le en ligne!
la source
C (gcc),
10093 octetsSolution de force brute, essaie d'égaliser avec chaque élément. Essayez-le en ligne ici .
Merci à plafondcat pour jouer au golf 7 octets.
Non golfé:
la source
PHP, 78 octets
Trie le tableau, puis parcourt une copie, faisant ressortir les éléments de l'original et sommant la différence absolue, qui doit être réduite de moitié pour le retour.
Sortie:
la source
PHP, 69 octets
fonction anonyme. Essayez-le en ligne .
la source
Input: *) A non-empty array a of integers *) Optionally, the length of a
.JavaScript (Node.js) , 52 octets
Essayez-le en ligne!
la source
Java (JDK), 112 octets
Golfé
Non golfé
la source
[1,1,4]
(renvoie 4, mais la réponse est 3).Kotlin Android, 200 octets
Essayez en ligne
la source