L'indice d'équilibre d'une séquence est un indice tel que la somme des éléments aux indices inférieurs est égale à la somme des éléments aux indices supérieurs. Par exemple, dans une séquence A:
A[0]=-7 A[1]=1 A[2]=5 A[3]=2 A[4]=-4 A[5]=3 A[6]=0
3 est un indice d'équilibre, car:
A[0]+A[1]+A[2]=A[4]+A[5]+A[6]
6 est également un indice d'équilibre, car:
A[0]+A[1]+A[2]+A[3]+A[4]+A[5]=0
(la somme de zéro éléments est nulle) 7 n'est pas un indice d'équilibre, car ce n'est pas un indice valide de la séquence A.
L'idée est de créer un programme qui, étant donné une séquence (tableau), renvoie son indice d'équilibre (n'importe lequel) ou -1 s'il n'existe aucun indice d'équilibre.
Python - 72 caractères
Prend une entrée séparée par des virgules
la source
runhugs FILE.hs
pour exécuter le programmeFILE.hs
.Haskell (
9583)Lit une liste dans le style Haskell de stdin, par exemple.
et renvoie une liste de style Haskell des indices, par exemple.
Le résultat est
[]
, s'il n'y a pas d'index.S'il vous plaît dites-moi, si votre spécification veut un comportement différent.
Modifications:
la source
C - 96
Notez que cela imprime les indices d'équilibre dans l'ordre inverse.
Exemple d'utilisation:
la source
Ruby (
8377)Edit: Version plus courte comme suggéré par Ventero:
L'entrée est un nombre par ligne, la sortie est une liste d'index séparés par des virgules entre crochets.
la source
p (0...a.size).select{|x|eval"#{a[0..x]*?+}==#{a[x..-1]*?+}"}
(notez que c'est pour Ruby 1.9, car il utilise des littéraux de caractères comme chaînes)map
et l'esperluette. Et vous n'avez pas besoin l'opérateur Splat devant l' une$<
ou l' autre, donc dans l' ensemble de la ligne ressemblera à ceci:a=$<.map &:to_i
. ;)JavaScript (161)
http://jsfiddle.net/6qYQv/1/
la source
scala, 108
la source
J (12 caractères)
Verbe monadique en notation tacite qui renvoie un vecteur d'indices d'équilibre. Espaces insérés pour la lisibilité uniquement.
Pour expliquer cela, observez d'abord sa définition explicite;
y
est le paramètre formel:+
ajoute ses arguments./
est un adverbe qui insère le verbe à gauche entre les membres de son argument de droite, par exemple+/ 1 2 3 4
est le même que1 + 2 + 3 + 4
.\
est un adverbe qui applique le verbe à sa gauche à tous les préfixes préfixes de son argument de droite. Par exemple, en<
dessinant une boîte autour de son argument,<\ 1 2 3 4
produitAinsi,
+/\
calcule pour chaque préfixe de son argument de droite la somme.\.
est comme\
mais opère sur des suffixes au lieu de préfixes. Ainsi,+/\.
calcule un vecteur de sommes de suffixes.=
effectue une comparaison point par point de ses arguments. Par exemple, les1 1 3 3 = 1 2 3 4
rendements1 0 1 0
.(+/\. y) = (+/\ y)
donne un pour tous les indices pour lesquels la somme des suffixes est égale à la somme des préfixes, ou, un équilibre est créé.I.
renvoie un vecteur des indices auxquels le vecteur contient un.la source
Python 2, 70
L'idée est de suivre la somme en cours
s
et de vérifier si elle est la moitié de la somme du tableau sans l'élément courant, et donc égale à la somme du tableau après l'élément courant. Dans l'affirmative, nous mettons à jour l'indice d'équilibre à l'indice actuel. Le dernier indice d'équilibre est imprimé, ou la valeur initiale-1
s'il n'y en a pas.En fait, nous stockons le complément binaire de l'indice d'équilibre afin de pouvoir l'initialiser à la place.
la source
Python - 114
Python - 72
Imprime si l'indice donné est ou non un indice d'équilibre, n'imprime pas les indices entières auxquelles le tableau est équilibré.
la source
PHP, 134 caractères
J'ai une démangeaison que ce soit loin d'être un golf PHP optimal, mais juste à bout de souffle (cerveaux). Au moins, c'est plus court qu'avec array_sum et array_splice :-)
la source
PHP (81)
for($i=count($a)-1,$c=0;$i+1&&$c!=(array_sum($a)-$a[$i])/2;$c+=$a[$i--]);echo $i;
http://3v4l.org/qJvhO
Puisqu'aucune entrée n'a été spécifiée, cela doit être initialisé avec le tableau comme variable
$a
.la source