Чтобы проверить, сбалансирован ли список неотрицательных целых чисел , можно представить, что на доске выставлены соответствующие веса, а затем попытаться уравновесить доску на стержне так, чтобы суммарные относительные веса слева и справа от стержня были одинаковыми. Относительный вес дается умножением веса на его расстояние до оси (см. Закон рычага ).
(Источник: Википедия )
Это изображение соответствует списку [100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5]
. Этот список сбалансирован, потому что 5
имеет расстояние 20 до точки поворота, 100
расстояние 1 и 5*20 = 100 = 100*1
.
Примеры
3 1 5 7
#########
^
В этом случае стержень находится непосредственно под 5
, то 3
есть расстояние 2 и 1
и 7
имеет расстояние 1. Таким образом , обе стороны слева и справа от суммы поворота до 7
( 3*2 + 1*1
слева и 7*1
справа) и поэтому список [3, 1, 5, 7]
сбалансирован.
Обратите внимание, однако, что сводка не обязательно должна быть помещена под одним из элементов списка, но также может быть помещена между двумя элементами списка:
6 3 1
#######
^
В этом случае расстояния становятся 0.5, 1.5, 2.5, ...
и так далее. Этот список также сбалансирован, потому что 6*0.5 = 3 = 3*0.5 + 1*1.5
.
Поворот может быть размещен только под одним числом или точно посередине между двумя числами, а не, например, на две трети между двумя числами.
задача
Учитывая список неотрицательных целых чисел в любом приемлемом формате, выведите truthy
значение, если список может быть сбалансирован, и falsy
значение в противном случае.
Вы можете предположить, что входной список содержит как минимум два элемента и что хотя бы один элемент не равен нулю.
Это задача кода-гольфа , поэтому выигрывает ответ с наименьшим количеством байтов на каждом языке.
Правдивые тесты
[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]
Ложные тесты
[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]
Множество связанных с этим проблем было найдено в то время, когда эта задача была в песочнице : сбалансированное число? , Индекс равновесия последовательности , Балансировать набор весов на качелях , Балансирующие слова , Я опрокинусь? и где находится стержень?
You can assume that the input list contains at least two elements and that at least one element is non-zero.