Гравитационная сила - это сила, которая притягивает любые два объекта с массой. В этом вызове наши объекты будут числами, а их масса - их стоимостью. Для этого нам важна не сила, а направление.
Представьте себе этот набор чисел
[1 6 9 4 6 9 7 6 4 4 9 8 7]
Каждый из них создает силу между собой и соседними числами. При некоторых условиях это приведет к тому, что другое число будет притягиваться (перемещаться) к числу. Когда число больше соседнего, оно привлекает его. Давайте посмотрим на наш предыдущий пример:
[1 → 6 → 9 ← 4 6 → 9 ← 7 ← 6 ← 4 4 → 9 ← 8 ← 7]
Число 1
не достаточно велико для перемещения 6
, но число 6
и т. Д. В основном числа перемещаются на самое большое соседнее число (также больше, чем само число). Если оба соседних числа равны, то это не привлекает. Это также происходит, когда число и соседние числа равны.
Это только для того, чтобы показать привлекательность, но что происходит после? Числа, которые сталкиваются из-за притяжения, суммируются:
[20 32 28]
Таким образом, основная задача состоит в том, чтобы, учитывая набор чисел, вывести результат привлеченного набора чисел.
Пример 1
Input => [10 15 20 10 20 10 10]
[10 → 15 → 20 10 20 ← 10 10]
Output => [45 10 30 10]
Пример 2
Input => [9 9 9 9 8 1 8]
[9 9 9 9 ← 8 1 8]
Output => [9 9 9 17 1 8]
Пример 3
Input => [1 6 9 4 6 9 7 6 4 4 9 8 7]
[1 → 6 → 9 ← 4 6 → 9 ← 7 ← 6 ← 4 4 → 9 ← 8 ← 7]
Output => [20 32 28]
Пример 4
Input => [1 2 3 2 1]
[1 → 2 → 3 ← 2 ← 1]
Output => [9]
Пример 5
Input => [1]
Output => [1]
Пример 6
Input => [1 1]
Output => [1 1]
Пример 7
Input => [2 1 4]
Output => [2 5]
Примечания
- Аттракцион происходит только один раз
- Номера не привязаны к несмежным номерам
- Набор чисел будет содержать только натуральные числа
[1 3 5 4 2]
= 15?G*M*m / r^2
одинакова для обоих тел. Легкий движется больше, чем тяжелый из-за импульса, а не из-за недостатка притяжения. Может быть, сказать «1 не достаточно большой, чтобы двигаться 6».Ответы:
JavaScript (ES6),
106 104100 байтСохранено 2 байта благодаря @Shaggy
Попробуйте онлайн!
комментарии
a[]
источник
[1,3,5,3,1,2,1]
и выводиться[14,2]
, но на самом деле он работает правильно и выводит[13,3]
.Stax ,
27252318 байтЗапустите и отладьте его
Вывод разделен переводом строки.
Эта программа работает с соседними парами в массиве и определяет, следует ли разделить их, используя эту процедуру.
Рассмотрим некоторые произвольные входные данные
[... w x y z ...]
. Вот как определить, должен ли быть разделитель междуx
иy
.x == y
да, то да.x > y
, тогда iffz >= x
.y > x
, тогда iffw >= y
.Суммирование оставлено как упражнение.
источник
Сетчатка 0.8.2 , 64 байта
Попробуйте онлайн! Ссылка включает тестовый набор. Объяснение:
Преобразовать в одинарный.
Уберите разделители между привлеченными числами.
(?<=(1+))
устанавливает\1
число перед разделителем. После разделителя есть два случая:В этих случаях существует притяжение между двумя числами, и удаление разделителя приводит к столкновению чисел, складывая их вместе.
Преобразовать в десятичную.
источник
Желе , 23 байта
Попробуйте онлайн!
Монадическая ссылка, которая принимает список целых чисел в качестве аргумента и возвращает список целых чисел.
объяснение
Некоторое вдохновение взято из Stax-ответа @ recursive .
источник
C (gcc) , 111 байт
Попробуйте онлайн!
Принимает массив целых чисел с нулевым символом в конце.
объяснение
источник
Python 2 , 162 байта
Попробуйте онлайн!
источник
J , 45 байт
Попробуйте онлайн!
Вдохновлен оригинальным ответом Stax на рекурсив
источник
R ,
222196173 байтВот решение с некоторой помощью от Робин Райдер
Попробуйте онлайн!
Краткий набор комментариев
источник
sign(e)
вместо(e>0)-(e<0)
{}
в цикле for нет необходимости, поскольку в цикле есть только одна инструкция.y
.m
это логическое значениеPython,
114112 байтПри этом используется тот факт, что направление стрелки на самом деле не имеет значения, и что наличие стрелки между a [i] и a [i + 1] можно определить, посмотрев на диапазон четырех элементов a [i- 1: I + 3].
Изменить: Спасибо Джо Кинг за разъяснение правил
источник
Perl 5 ,
156147 байтПопробуйте онлайн!
источник
K (нгн / к) , 46 байтов
Попробуйте онлайн!
0,x,0
окружить аргумент 0с3'
тройки последовательных предметов{
}'
за каждое занятиеx 2 0
получить последний и первый из текущего триплета -x[2]
иx[0]
. они соседиx[1]
, на которых центрирован триплетx<\:
сравнить, используя меньше, чем против каждого текущего триплета+/
сумма. В результате получается пара, соответствующаяx[2]
иx[0]
2=
проверьте, больше ли один из соседей, чем другие 2 элементаx
, верните пару логических значений 0 или 1-/
вычесть их. результат -1 означаетx[1]
притяжение слева, 1 справа и 0 означает, что он остается на месте(!#x)+
добавьте 0 к первому элементу, 1 ко второму и т. д. Это вычисляет индексы, к которым привлекаются элементы.{x x}/
Индекс с собой до схождения. Результатом являются эффективные показатели, к которым в конечном итоге привлекается каждый элемент.x@.=
группаx
(исходный аргумент) по тем. Результатом является список списков+/'
суммировать каждыйисточник
Clojure ,
299252 байтаПопробуйте онлайн!
Объяснение:
источник
APL (Dyalog Classic) ,
5251 байтПопробуйте онлайн!
перевод моего к ответу
источник
05AB1E , 21 байт
Попробуйте онлайн!
источник