Индекс равновесия последовательности представляет собой такой индекс, что сумма элементов при более низких индексах равна сумме элементов при более высоких индексах. Например, в последовательности A:
A[0]=-7 A[1]=1 A[2]=5 A[3]=2 A[4]=-4 A[5]=3 A[6]=0
3 является индексом равновесия, потому что:
A[0]+A[1]+A[2]=A[4]+A[5]+A[6]
6 также является индексом равновесия, потому что:
A[0]+A[1]+A[2]+A[3]+A[4]+A[5]=0
(сумма нулевых элементов равна нулю) 7 не является индексом равновесия, поскольку он не является допустимым индексом последовательности А.
Идея состоит в том, чтобы создать программу с заданной последовательностью (массивом), которая возвращает свой индекс равновесия (любой) или -1, если индексов равновесия не существует.
Питон - 72 символа
Принимает ввод через запятую
источник
runhugs FILE.hs
для запуска программыFILE.hs
.Хаскелл (
9583)Читает список в стиле Haskell из stdin, например.
и возвращает список стилей Haskell для индексов, например.
Результат есть
[]
, если индекса нет.Пожалуйста, скажите мне, если ваша спецификация хочет другого поведения.
Редактирование:
источник
С - 96
Обратите внимание, что это печатает индексы равновесия в обратном порядке.
Пример использования:
источник
Рубин (
8377)Изменить: более короткая версия, предложенная Ventero:
Ввод - одно число в строке, вывод - разделенный запятыми список индексов в квадратных скобках.
источник
p (0...a.size).select{|x|eval"#{a[0..x]*?+}==#{a[x..-1]*?+}"}
(обратите внимание, что это для Ruby 1.9, так как он использует символьные литералы в качестве строк)map
амперсандом должно быть пространство . И вам не нужен оператор пейнтбольного в передней части$<
либо, так что в целом линия будет выглядеть следующим образом :a=$<.map &:to_i
. ;)JavaScript (161)
http://jsfiddle.net/6qYQv/1/
источник
Скала, 108
источник
J (12 символов)
Монадический глагол в неявной записи, который возвращает вектор индексов равновесия. Пробелы вставлены только для разборчивости.
Чтобы объяснить это, сначала соблюдайте его явное определение;
y
это формальный параметр:+
добавляет свои аргументы./
это наречие, которое вставляет глагол слева от него между членами своего правого аргумента, например+/ 1 2 3 4
, такой же, как1 + 2 + 3 + 4
.\
это наречие, которое применяет глагол слева от всех префиксов префиксов своего правого аргумента. Например, при<
рисуя рамку вокруг своего аргумента,<\ 1 2 3 4
производитТаким образом,
+/\
для каждого префикса его правого аргумента вычисляется сумма.\.
похоже,\
но работает с суффиксами вместо префиксов. Таким образом,+/\.
вычисляется вектор сумм суффиксов.=
выполняет поэлементное сравнение своих аргументов. Например,1 1 3 3 = 1 2 3 4
урожайность1 0 1 0
.(+/\. y) = (+/\ y)
получается один для всех индексов, при которых сумма суффикса равна сумме префикса, или создается равновесие.I.
возвращает вектор индексов, при котором вектор содержит единицу.источник
Python 2, 70
Идея состоит в том, чтобы отследить текущую сумму
s
и проверить, равна ли она половине суммы массива без текущего элемента, и, следовательно, равна сумме массива после текущего элемента. Если это так, мы обновляем индекс равновесия до текущего индекса. Последний индекс равновесия печатается, или начальное значение,-1
если его нет.На самом деле, мы храним битовое дополнение индекса равновесия, чтобы вместо него можно было установить его в 0.
источник
Питон - 114
Python - 72
Печатает, является ли данный индекс индексом равновесия, не печатает целочисленные индексы, при которых массив сбалансирован.
источник
PHP, 134 символа
У меня есть зуд, что это далеко от оптимальной игры в гольф PHP, но просто выдохся (мозги). По крайней мере, это короче, чем с array_sum и array_splice :-)
источник
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
Поскольку вход не был указан, его необходимо инициализировать с помощью массива в качестве переменной
$a
.источник