Pour vérifier si une liste d'entiers non négatifs est équilibrée , on peut imaginer mettre des poids respectifs sur une planche puis essayer d'équilibrer la planche sur un pivot de telle sorte que les poids relatifs résumés à gauche et à droite du pivot soient les mêmes. Le poids relatif est donné en multipliant le poids par sa distance au pivot (voir loi du levier ).
(Source: wikipedia )
Cette image correspond à une liste [100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5]
. Cette liste est équilibrée car la 5
distance de 20 au pivot, la 100
distance de 1 et 5*20 = 100 = 100*1
.
Exemples
3 1 5 7
#########
^
Dans ce cas, le pivot est directement sous le 5
, 3
a la distance 2 et le 1
et 7
a la distance 1. Donc, les deux côtés gauche et droit du pivot se résument à 7
( 3*2 + 1*1
à gauche et 7*1
à droite) et donc la liste [3, 1, 5, 7]
est équilibrée.
Notez, cependant, que le pivot ne doit pas être placé sous l'un des éléments de la liste, mais peut également être placé entre deux éléments de la liste:
6 3 1
#######
^
Dans ce cas, les distances deviennent 0.5, 1.5, 2.5, ...
et ainsi de suite. Cette liste est également équilibrée car 6*0.5 = 3 = 3*0.5 + 1*1.5
.
Le pivot ne peut être placé exactement en dessous d'un nombre ou exactement au milieu entre deux nombres, et non par exemple aux deux tiers entre deux nombres.
Tâche
Étant donné une liste d'entiers non négatifs dans n'importe quel format raisonnable, affichez une truthy
valeur si la liste peut être équilibrée et une falsy
valeur dans le cas contraire.
Vous pouvez supposer que la liste d'entrée contient au moins deux éléments et qu'au moins un élément est différent de zéro.
C'est un défi de code-golf , donc la réponse avec le moins d'octets dans chaque langue l'emporte.
Vrais tests
[1, 0]
[3, 1, 5, 7]
[6, 3, 1]
[100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5]
[10, 4, 3, 0, 2, 0, 5]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[7, 7, 7, 7]
Valises de test de falsification
[1, 2]
[3, 6, 5, 1, 12]
[0, 0, 2, 0, 1, 0]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[6, 3, 2, 4, 0, 1, 2, 3]
[4, 0, 0, 2, 3, 5, 2, 0, 1, 2, 3, 0, 0, 1, 2, 4, 3, 1, 3, 0, 0, 2]
[100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5]
Beaucoup de défis connexes ont été trouvés alors que ce défi était en bac à sable : est-ce un nombre équilibré? , Index d'équilibre d'une séquence , Equilibrer un ensemble de poids sur une bascule , Mots d'équilibrage , Vais-je basculer? et où appartient le pivot?
You can assume that the input list contains at least two elements and that at least one element is non-zero.
Réponses:
Pyth,
1210 octetsEssayez-le en ligne
Enregistré 2 octets grâce à M. Xcoder et Erik l'Outgolfer.
Explication
la source
y
à la place de*2
!%ys*VQUQs
Wolfram Language (Mathematica) , 36 octets
Il s'agit d'un problème de centre de masse dans un système de coordonnées avec l'origine à l'un des points, puis vous déterminez si le CM tombe sur un point de réseau où la largeur du réseau = 1/2.
Essayez-le en ligne!
la source
05AB1E , 6 octets
Essayez-le en ligne!
Comment?
la source
[1,1]
(devrait être véridique). Il semble que le doublement implicite ne soit pas réellement là.Gelée , 6 octets
Essayez-le en ligne!
Eh bien, on dirait que Leaky Nun a souligné l'inutile.
Utilisation de l'approche Pyth de Mnemonic.
Renvoie un entier positif (véridique) ou zéro (falsifié).
la source
LḶ
place (bien qu'il serait réussir dans tous les cas de test). EDIT: Oooh, maintenant que j'y repense, il semble que oui ... ( b | a ⇔ b | a + b duh)R , 34 octets
Essayez-le en ligne!
Prend l'entrée en tant que vecteur. Ports réponse mnémonique . Renvoie une
1x1
matrice.la source
Japt , 10 octets
Essayez-le en ligne!
Explication:
Retourne
1
pour la vérité,0
pour la fausse.la source
Python 2 , 41 octets
La sortie se fait via le code de sortie, donc 0 est vrai et 1 est faux.
Essayez-le en ligne!
la source
Julia ,
3127 octets4 octets enregistrés grâce à @Dennis
Essayez-le en ligne!
la source
Rubis , 47 octets
Enregistré 2 octets grâce à M. Xcoder
Essayez-le en ligne!
la source
C,
140137 octetsEssayez-le en ligne!
la source
Python 3 , 51 octets
Essayez-le en ligne!
la source
Perl 6 , 23 octets
Essaye-le
Utilise l'algorithme de diverses autres entrées.
Étendu:
la source
Japt,
11108 octetsInspiré à l'origine par la solution de Mnemonic
Essayez-le
13 octets économisés grâce à ETHproductions.Explication
Entrée implicite du tableau
U
. Réduisez par addition (x
), multipliant chaque élément par son index de base 0 (*
) dans le processus. Vérifiez si le résultat est divisible de façon égale (v
) par la somme de l'entrée d'origine (Ux
), chaque élément étant multiplié par 0,5 (*½
).la source
m* x*2 vUx
. Cela me fait me demander si l'm* x*2
on peut réduire davantage ...x*
et vérifiez s'il est divisible parUx*½
:)XY{X*Y}
)C # , 71 octets
Golfé
Non golfé
Code complet
Communiqués
71 bytes
- Solution initiale.Remarques
Je pourrais avoir, ou ne pas avoir, manifestement "emprunté" la solution Dennis Python 2 ...
la source
Haskell , 39 octets
Essayez-le en ligne!
la source
APL (Dyalog) , 15 octets
Essayez-le en ligne!
Ça me parait très impoli ...
la source
Python 2 ,
7875 octetsmerci à M. Xcoder pour -3 octets
Essayez-le en ligne!
la source
0 in
. Aussi pas besoin de l'0
enrange(0,len(l)*2)
..Julia 0,6 , 25 octets
Essayez-le en ligne!
la source
PHP ,
139128 octetsEssayez-le en ligne!
die
grâce à manassehkatzla source
die(1)
etdie(0)
enregistrer 4 octets en utilisant le code de sortie au lieu d'une chaîne imprimée.Swift , 76 octets
Essayez-le en ligne!
la source
Perl 5 , 55 + 1 (
a
) = 56 octetsEssayez-le en ligne!
la source