Фон
У меня есть ряд мощных магнитов и куча металлических предметов между ними. Куда магниты их потянут?
вход
Ваш ввод представляет собой массив неотрицательных целых чисел, который будет содержать хотя бы одно 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
- хорошая идея!Сетчатка ,
9772 байтаПредполагается, что входными данными будет список унарных целых чисел, разделенных запятыми (начальные и конечные разделители, например,
[...]
работают отлично).Запустите все тесты здесь. (Для удобства это обеспечивает преобразование из и в десятичное значение автоматически.)
Вот совершенно другая идея, которая позволяет избежать дорогостоящих уравновешивающих групп за счет использования нескольких этапов В настоящее время он на 6 байт длиннее, но может быть более пригодным для игры в гольф:
источник
JavaScript (ES6), 108 байт
объяснение
Перебирает каждую ячейку и, если она содержит металл, проверяет, пуста ли следующая ячейка в направлении ближайшего магнита, и, если она есть, перемещает ее туда. Этот процесс повторяется много раз, пока весь металл не продвинется так далеко, как только может.
источник
PHP, 337 символов
Да, это очень долго, потому что PHP на самом деле не является языком для игры в гольф, но он работает, и я сделал FUN, делая это так, что мне хорошо. Конечно, я открыт для возможных недостатков.
Также есть небольшая
ошибкафункция , которая думает, так, например , здесь:похоже, что 12 волшебным образом оказались перед 3, но это не так!
3 уважает большее число и позволяет ему приблизиться к магу!
источник