Фон
У меня есть ряд мощных магнитов и куча металлических предметов между ними. Куда магниты их потянут?
вход
Ваш ввод представляет собой массив неотрицательных целых чисел, который будет содержать хотя бы одно 1
. Вы можете использовать любой разумный формат.
В 0
s массива представляет собой пустое пространство, и 1
s представляют собой фиксированные магниты. Все остальные числа представляют собой металлические предметы, которые притягиваются магнитами. Каждый объект притягивается к ближайшему магниту (если есть галстук, объект тянется вправо), и он движется в этом направлении, пока не столкнется с магнитом или другим объектом. В конце концов, все объекты сгруппировались вокруг магнитов. Порядок объектов сохраняется.
Выход
Ваш вывод - это массив, в котором каждый объект находится как можно ближе к ближайшему магниту. Он должен иметь тот же формат, что и входные данные.
пример
Рассмотрим массив
[0,0,2,0,1,1,0,2,0,3,0,5,0,1,0]
Крайняя левая 2
сторона притягивается к первой паре магнитов, как и вторая 2
. 3
Имеет магнит четыре шагов в обоих направлениях, поэтому он получает потянули вправо. Он 5
также вытягивается вправо и проходит между 3
магнитом и. Правильный вывод
[0,0,0,2,1,1,2,0,0,0,0,3,5,1,0]
Правила и оценки
Вы можете написать полную программу или функцию. Побеждает меньшее количество байтов, и стандартные лазейки запрещены.
Контрольные примеры
[0,1,0] -> [0,1,0]
[1,0,2,0,0,1,0] -> [1,2,0,0,0,1,0]
[7,0,5,0,0,1,0] -> [0,0,0,7,5,1,0]
[1,0,3,0,1,0,3,0,1] -> [1,0,0,3,1,0,0,3,1]
[1,0,0,0,0,0,0,7,3] -> [1,7,3,0,0,0,0,0,0]
[1,2,3,4,5,6,7,8,9,10,11,0,0,0,1] -> [1,2,3,4,5,6,7,0,0,0,8,9,10,11,1]
[12,3,0,0,1,0,1,3,0,0,6,12,0,0,0,1] -> [0,0,12,3,1,0,1,3,6,0,0,0,0,0,12,1]
1
- хорошая идея!