Чтобы проверить, сбалансирован ли список неотрицательных целых чисел , можно представить, что на доске выставлены соответствующие веса, а затем попытаться уравновесить доску на стержне так, чтобы суммарные относительные веса слева и справа от стержня были одинаковыми. Относительный вес дается умножением веса на его расстояние до оси (см. Закон рычага ).
(Источник: Википедия )
Это изображение соответствует списку [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.
Ответы:
Pyth,
1210 байтПопробуйте онлайн
Сохранено 2 байта благодаря г-ну Xcoder и Эрику Outgolfer.
объяснение
источник
y
вместо*2
!%ys*VQUQs
Wolfram Language (Mathematica) , 36 байт
Это проблема центра масс в системе координат с началом координат в одной из точек, и затем вы определяете, попадает ли КМ в точку решетки, где ширина решетки = 1/2.
Попробуйте онлайн!
источник
05AB1E , 6 байтов
Попробуйте онлайн!
Как?
источник
[1,1]
(должно быть правдой). Кажется, что неявного удвоения на самом деле нет.Желе , 6 байт
Попробуйте онлайн!
Ну, похоже, Лаки Монахиня указала на бессмысленность.
Используя подход Mnemonic's Pyth.
Возвращает положительное целое число (правда) или ноль (ложь).
источник
LḶ
вместо этого (хотя это будет успешно для всех тестовых случаев). РЕДАКТИРОВАТЬ: Ооо, теперь, когда я снова думаю об этом, кажется, что так ... ( b | a⇔b | a + b дух)R , 34 байта
Попробуйте онлайн!
Принимает ввод как вектор. Порты мнемоника ответ . Возвращает
1x1
матрицу.источник
Japt , 10 байт
Попробуйте онлайн!
Объяснение:
Возвращается
1
за правду,0
за ложь.источник
Python 2 , 41 байт
Вывод осуществляется через код выхода, поэтому 0 соответствует действительности, а 1 - неверно.
Попробуйте онлайн!
источник
Юлия ,
3127 байт4 байта сохранены благодаря @Dennis
Попробуйте онлайн!
источник
Рубин , 47 байтов
Сохранено 2 байта благодаря Mr. Xcoder
Попробуйте онлайн!
источник
C
140137 байтПопробуйте онлайн!
источник
Python 3 , 51 байт
Попробуйте онлайн!
источник
Perl 6 , 23 байта
Попробуй это
Использует алгоритм из различных других записей.
Expanded:
источник
Джапт,
11108 байтПервоначально вдохновленный решением Mnemonic
Попытайся
13 байта сохранены благодаря ETHproductions.объяснение
Неявный ввод массива
U
. Сократите путем add (x
), умножая каждый элемент на его индекс на основе 0 (*
) в процессе. Проверьте, является ли результат равномерно делимым (v
) на сумму исходного input (Ux
), при этом каждый элемент умножается на 0.5 (*½
).источник
m* x*2 vUx
. Это заставляет меня задуматься о том,m* x*2
можно ли уменьшить это далее ...x*
и проверьте, делится ли оно наUx*½
:)XY{X*Y}
)C # , 71 байт
Golfed
Ungolfed
Полный код
релизы
71 bytes
- Исходное решение.Заметки
Я мог бы иметь или не иметь явно «заимствованного» решения Dennis Python 2 ...
источник
Haskell , 39 байт
Попробуйте онлайн!
источник
APL (Dyalog) , 15 байтов
Попробуйте онлайн!
Выглядит очень нечестиво для меня ...
источник
Python 2 ,
7875 байтспасибо мистеру Xcoder за -3 байта
Попробуйте онлайн!
источник
0 in
. Кроме того, нет необходимости0
воrange(0,len(l)*2)
Юлия 0,6 , 25 байт
Попробуйте онлайн!
источник
PHP ,
139128 байтПопробуйте онлайн!
die
благодаря manassehkatzисточник
die(1)
иdie(0)
сохранять 4 байта, используя код выхода вместо печатной строки.Swift , 76 байт
Попробуйте онлайн!
источник
Perl 5 , 55 + 1 (
a
) = 56 байтПопробуйте онлайн!
источник