Der Gleichgewichtsindex einer Sequenz ist ein Index, bei dem die Summe der Elemente bei niedrigeren Indizes gleich der Summe der Elemente bei höheren Indizes ist. Zum Beispiel in einer Sequenz A:
A[0]=-7 A[1]=1 A[2]=5 A[3]=2 A[4]=-4 A[5]=3 A[6]=0
3 ist ein Gleichgewichtsindex, weil:
A[0]+A[1]+A[2]=A[4]+A[5]+A[6]
6 ist auch ein Gleichgewichtsindex, weil:
A[0]+A[1]+A[2]+A[3]+A[4]+A[5]=0
(Summe der Nullelemente ist Null) 7 ist kein Gleichgewichtsindex, da es sich nicht um einen gültigen Index der Sequenz A handelt.
Die Idee ist, ein Programm zu erstellen, das bei gegebener Sequenz (Array) seinen Gleichgewichtsindex (beliebig) oder -1 zurückgibt, wenn keine Gleichgewichtsindizes vorhanden sind.
Python - 72 Zeichen
Übernimmt eine durch Kommas getrennte Eingabe
quelle
runhugs FILE.hs
um das Programm auszuführenFILE.hs
.Haskell (
9583)Liest eine Liste im Haskell-Stil von stdin, z.
und gibt eine Haskell-Style-Liste der Indizes zurück, z.
Das Ergebnis ist
[]
, wenn es keinen Index gibt.Bitte sagen Sie mir, ob Ihre Spezifikation ein anderes Verhalten wünscht.
Bearbeitungen:
quelle
C - 96
Beachten Sie, dass dadurch die Gleichgewichtsindizes in umgekehrter Reihenfolge gedruckt werden.
Beispielnutzung:
quelle
Ruby (
8377)Bearbeiten: Kürzere Version wie von Ventero vorgeschlagen:
Die Eingabe ist eine Zahl pro Zeile, die Ausgabe ist eine durch Kommas getrennte Liste von Indizes in eckigen Klammern.
quelle
p (0...a.size).select{|x|eval"#{a[0..x]*?+}==#{a[x..-1]*?+}"}
(Beachten Sie, dass dies für Ruby 1.9 gilt, damap
und dem kaufmännischen Und muss ein Leerzeichen stehen . Und Sie brauchen den Splat-Operator auch nicht vor dem$<
, also würde die gesamte Zeile so aussehen :a=$<.map &:to_i
. ;)JavaScript (161)
http://jsfiddle.net/6qYQv/1/
quelle
Scala, 108
quelle
J (12 Zeichen)
Ein monadisches Verb in stillschweigender Notation, das einen Vektor von Gleichgewichtsindizes zurückgibt. Leerzeichen nur zur besseren Lesbarkeit eingefügt.
Um dies zu erklären, beachten Sie zunächst die explizite Definition.
y
ist der formale Parameter:+
fügt seine Argumente hinzu./
ist ein Adverb, das das Verb links davon zwischen die Mitglieder seines rechten Arguments einfügt, z. B.+/ 1 2 3 4
dasselbe wie1 + 2 + 3 + 4
.\
ist ein Adverb, das das Verb links von ihm auf alle Präfixe des rechten Arguments anwendet. Wenn Sie beispielsweise<
ein Kästchen um das Argument zeichnen, wird<\ 1 2 3 4
erzeugtSomit
+/\
berechnet für jedes Präfixobjekt ihres rechten Arguments der Summe.\.
ist wie\
, arbeitet aber mit Suffixen anstelle von Präfixen. Somit+/\.
berechnet einen Vektor von Summen von Suffixen.=
führt einen artikelweisen Vergleich seiner Argumente durch. Zum Beispiel1 1 3 3 = 1 2 3 4
ergibt1 0 1 0
.(+/\. y) = (+/\ y)
ergibt sich eins für alle Indizes, bei denen die Suffixsumme gleich der Präfixsumme ist, oder es wird ein Gleichgewicht erzeugt.I.
einen Vektor der Indizes zurück, bei denen der Vektor eine Eins enthält.quelle
Python 2, 70
Die Idee ist, die laufende Summe zu verfolgen
s
und zu prüfen, ob sie die Hälfte der Summe des Arrays ohne das aktuelle Element ist und daher gleich der Summe des Arrays nach dem aktuellen Element ist. In diesem Fall aktualisieren wir den Gleichgewichtsindex auf den aktuellen Index. Der letzte Gleichgewichtsindex wird gedruckt oder der Anfangswert,-1
falls keiner vorhanden ist.Tatsächlich speichern wir das Bitkomplement des Gleichgewichtsindex, damit wir es stattdessen auf 0 initialisieren können.
quelle
Python - 114
Python - 72
Gibt an, ob der angegebene Index ein Gleichgewichtsindex ist oder nicht, und druckt nicht die ganzzahligen Unabhängigkeiten, bei denen das Array ausgeglichen ist.
quelle
PHP, 134 Zeichen
Ich habe einen Juckreiz, dass dies alles andere als ein optimales PHP-Golfspiel ist, aber mir geht einfach der Dampf aus (Gehirn). Zumindest ist es kürzer als mit array_sum und array_splice :-)
quelle
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
Da keine Eingabe angegeben wurde, muss diese mit dem Array als Variable initialisiert werden
$a
.quelle