La force de gravitation est une force qui attire deux objets quelconques avec une masse. Dans ce défi, nos objets seront des nombres et leur masse sera leur valeur. Pour ce faire, nous ne nous soucions pas de la force de la force mais de sa direction.
Imaginez cet ensemble de chiffres
[1 6 9 4 6 9 7 6 4 4 9 8 7]
Chacun d'eux crée une force entre lui-même et ses nombres adjacents. Dans certaines conditions, cela entraînera un autre nombre attiré (déplacé) vers un nombre. Quand le nombre est plus grand que le nombre adjacent, il l'attire. Jetons un coup d'oeil à notre exemple précédent:
[1 → 6 → 9 ← 4 6 → 9 ← 7 ← 6 ← 4 4 → 9 ← 8 ← 7]
Le nombre 1
n’est pas assez grand pour être déplacé 6
, mais le nombre 6
est, etc. En gros, les nombres sont déplacés vers le plus grand nombre adjacent (également plus grand que le nombre lui-même). Si les deux nombres adjacents sont égaux, il n'est pas attiré alors. Cela se produit également lorsque le nombre et le nombre adjacent sont égaux.
Ce n'est que pour montrer l'attraction, mais que se passe-t-il après? Les nombres qui entrent en collision par attraction sont résumés:
[20 32 28]
En gros, le défi consiste à, à partir d’un ensemble de chiffres, produire le résultat de l’ensemble de nombres attiré.
Exemple 1
Input => [10 15 20 10 20 10 10]
[10 → 15 → 20 10 20 ← 10 10]
Output => [45 10 30 10]
Exemple 2
Input => [9 9 9 9 8 1 8]
[9 9 9 9 ← 8 1 8]
Output => [9 9 9 17 1 8]
Exemple 3
Input => [1 6 9 4 6 9 7 6 4 4 9 8 7]
[1 → 6 → 9 ← 4 6 → 9 ← 7 ← 6 ← 4 4 → 9 ← 8 ← 7]
Output => [20 32 28]
Exemple 4
Input => [1 2 3 2 1]
[1 → 2 → 3 ← 2 ← 1]
Output => [9]
Exemple 5
Input => [1]
Output => [1]
Exemple 6
Input => [1 1]
Output => [1 1]
Exemple 7
Input => [2 1 4]
Output => [2 5]
Remarques
- L'attraction ne se produit qu'une fois
- Les nombres ne sont pas attirés par des nombres non adjacents
- L'ensemble des nombres ne contiendra que des entiers positifs
[1 3 5 4 2]
= 15?G*M*m / r^2
, est égale pour les deux corps. Le plus léger bouge plus que le plus lourd à cause de son élan, pas à cause d'un manque d'attraction. Peut-être dire "1 n'est pas assez grand pour déplacer 6".Réponses:
JavaScript (ES6),
106 104100 octets2 octets sauvés grâce à @Shaggy
Essayez-le en ligne!
Commenté
a[]
la source
[1,3,5,3,1,2,1]
sortie[14,2]
, mais il fonctionne correctement et affiche en sortie[13,3]
.Stax ,
27252318 octetsExécuter et déboguer
La sortie est séparée par des nouvelles lignes.
Ce programme fonctionne sur des paires adjacentes dans la matrice et détermine s'il doit y avoir une séparation entre elles en utilisant cette procédure.
Considérons une entrée arbitraire
[... w x y z ...]
. Voici comment déterminer s’il devrait y avoir une séparation entrex
ety
.x == y
, alors oui.x > y
, alors si et siz >= x
.y > x
, alors si et siw >= y
.La sommation est laissée comme un exercice.
la source
Retina 0.8.2 , 64 octets
Essayez-le en ligne! Le lien inclut la suite de tests. Explication:
Convertir en unaire.
Supprimez les séparateurs entre les numéros attirés.
(?<=(1+))
définit\1
le nombre avant le séparateur. Après le séparateur, il y a alors deux cas:Dans ces cas, il y a une attraction entre les deux nombres et la suppression du séparateur provoque la collision des nombres, en les additionnant.
Convertir en décimal.
la source
Gelée , 23 octets
Essayez-le en ligne!
Un lien monadique qui prend comme argument une liste d'entiers et renvoie une liste d'entiers.
Explication
Quelques inspirations tirées de la réponse Stax de @ récursive .
la source
C (gcc) , 111 octets
Essayez-le en ligne!
Prend un tableau d'entiers à zéro terminal.
Explication
la source
Python 2 , 162 octets
Essayez-le en ligne!
la source
J , 45 octets
Essayez-le en ligne!
Inspiré de la réponse Stax originale de récursive
la source
R ,
222196173 octetsVoici une solution avec l'aide de Robin Ryder
Essayez-le en ligne!
Une courte série de commentaires
la source
sign(e)
au lieu de(e>0)-(e<0)
{}
boucle for n'est pas nécessaire puisqu'il n'y a qu'une instruction dans la boucle.y
.m
s’agit d’un booléenPython,
114112 octetsCeci utilise le fait que la direction de la flèche n'a pas vraiment d'importance, et que la présence d'une flèche entre un [i] et un [i + 1] peut être déterminée en regardant la plage de quatre éléments a [i- 1: i + 3].
Edit: Merci à Jo King pour la clarification de la règle
la source
Perl 5 ,
156147 octetsEssayez-le en ligne!
la source
K (ngn / k) , 46 octets
Essayez-le en ligne!
0,x,0
entourer la dispute avec des 03'
triplets d'objets consécutifs{
}'
pour chaque fairex 2 0
obtenir le dernier et le premier du triplet actuel -x[2]
etx[0]
. ils sont les voisins dex[1]
, sur lesquels le triplet est centréx<\:
comparer en utilisant moins que contre chacun des triplets actuels+/
somme. le résultat est une paire correspondant àx[2]
etx[0]
2=
vérifie si l'un des voisins est supérieur aux 2 autres éléments dex
, retourne une paire de booléens 0 ou 1-/
soustrayez-les. un résultat de -1 signifie quex[1]
c'est attiré à gauche, 1 à droite et 0 signifie qu'il reste en place(!#x)+
ajoute 0 au premier élément, 1 au second, etc. Ceci calcule les indices vers lesquels les éléments sont attirés{x x}/
index avec lui-même jusqu'à la convergence. le résultat est l'indice effectif auquel chaque élément est finalement attiréx@.=
groupex
(l'argument initial) par ceux. le résultat est une liste de listes+/'
somme chaquela source
Clojure ,
299252 octetsEssayez-le en ligne!
Explication:
la source
APL (Dyalog Classic) ,
52 à51 octetsEssayez-le en ligne!
traduction de ma k réponse
la source
05AB1E , 21 octets
Essayez-le en ligne!
la source