Задача проста: собрать массив целых. Консолидация этого массива состоит из следующего:
- Все экземпляры 0 должны быть перемещены в конец массива.
- Между ненулевыми целыми числами не должно быть нулей.
- Все ненулевые индексы должны сохранять свой порядок.
Вызов
Консолидация массива в наименьшем количестве байтов.
Вы объединяете массив случайной длины размером до максимума вашего языка со случайными целыми числами. Ввод может быть любым естественным способом для вашего языка.
Примеры
вход
0 5 8 8 3 5 1 6 8 4 0 3 7 5 6 4 4 7 5 6 7 4 4 9 1 0 5 7 9 3 0 2 2 4 3 0 4 8 7 3 1 4 7 5 1 2 1 8 7 8 7 7 2 6 3 1 2 8 5 1 4 2 0 5 0 6 0 3
Выход
5 8 8 3 5 1 6 8 4 3 7 5 6 4 4 7 5 6 7 4 4 9 1 5 7 9 3 2 2 4 3 4 8 7 3 1 4 7 5 1 2 1 8 7 8 7 7 2 6 3 1 2 8 5 1 4 2 5 6 3 0 0 0 0 0 0 0 0
вход
-1 -7 -6 5 1 -5 -2 7 -3 -8 0 8 9 1 -8 -1 6 -4 1 -2 1 -7 5 4 -6 7 -3 9 8 3 -1 0 -5 -7 3 8 1 1 3 -3 -2 -2 0 -7 0 -4 8 6 -3 6 0 5 3 2 2 2 -2 -7 -3 9 -1 6 0 6 -7 9 4 -2 8 -8 -4 1 -8 4 3 7 3 5 1 0 3 3 7 -1 -5 1 -3 4 -7 0 3 2 -2 7 -3 0 0 2 -5 8 -3 -2 -7 -5 7 -3 -9 -7 5 8 -3 9 6 7 -2 4 7
Выход
-1 -7 -6 5 1 -5 -2 7 -3 -8 8 9 1 -8 -1 6 -4 1 -2 1 -7 5 4 -6 7 -3 9 8 3 -1 -5 -7 3 8 1 1 3 -3 -2 -2 -7 -4 8 6 -3 6 5 3 2 2 2 -2 -7 -3 9 -1 6 6 -7 9 4 -2 8 -8 -4 1 -8 4 3 7 3 5 1 3 3 7 -1 -5 1 -3 4 -7 3 2 -2 7 -3 2 -5 8 -3 -2 -7 -5 7 -3 -9 -7 5 8 -3 9 6 7 -2 4 7 0 0 0 0 0 0 0 0 0 0
Пример кода (Java)
public class Consolidate {
public static void main(String[] args) throws Exception {
int[] toConsolidate = new int[args.length];
for (int i=0; i<args.length; i++){
toConsolidate[i]=Integer.parseInt(args[i]);
}
for (int i=0; i<toConsolidate.length; i++) {
for (int k=0; k<toConsolidate.length-1; k++) {
if (toConsolidate[k] == 0){
toConsolidate[k] = toConsolidate[k+1];
toConsolidate[k+1] = 0;
}
}
}
for (int i:toConsolidate)
System.out.print(i+" ");
}
}
code-golf
array-manipulation
Аддисон Крамп
источник
источник
Ответы:
Pyth, 3 байта
Объяснение:
Попробуй это здесь .
источник
Q
может быть неявным в конце любого скрипта Pyth (при условии, что он находится за пределами лямбды, что и есть), делая это 2 байта.Желе, 3 байта
Сортирует список по логическому НЕ его значений. Попробуйте онлайн!
Как это работает
источник
¬Þ
!Октава, 18 байт
sort()
занимает слишком много байтов. Я просто буду использовать логическую индексацию.Примеры на идеоне .
источник
R,
292321 байтКак отмечает MarcoBreitig, мы можем сократить его до 21 байта, если нам не нужно предоставлять его как функцию:
Предыдущие версии:
Функция принимает вектор в качестве входных данных и упорядочивает их по логическому вектору, который возникает в результате отрицания входных данных.
Оригинальный ответ:
Функция принимает вектор в качестве входных данных и сцепляет (
c()
) ненулевые значения, а затем нулевые значения.источник
Сетчатка , 15
Простая повторная подстановка регулярных выражений:
Попробуйте онлайн.
источник
ES6, 23 байта
Раньше
sort
был нестабильный случай, и в этом случае вам нужно было 41 байт:источник
Байт-код Python (2.7.9), 252 байта, 33 кода операции, 0,0228 секунды
Это был построен , когда конкурс был еще самый быстрый код конкурса
Открывает файл в текущем каталоге
'SourceArray'
для использованияThe
co_code
(Фактический кодовый бит)Или версия файла .pyc
03F3
Вы можете попробовать скомпилировать мой исходный код самостоятельно, используя мою библиотеку на github. Я только что опубликовал коммит, который позволял комментировать, так что я надеюсь, что он все еще конкурирует, насколько быстрым является код ;)
Примерно эквивалентно
источник
Python, 32 байта
Принимает аргумент как любой итеративный (список, кортеж и т. Д.). Спасибо @xnor за то, что научили меня новому трюку!
источник
key=0..__eq__
(да, две точки)."abc".__eq__("abc")==True
. Это то, что называется, когда вы делаете"abc"==
. По причинам, у целых чисел Python его нет, а0. == 0
у чисел с плавающей точкой есть, и с тех пор мы можем заменить его оператор равенства0..__eq__
..__eq__
методе, но двойные точки меня смущали . Я не уловил, что первым был десятичный знак в литерале с плавающей точкой.Matlab: 21 байт
Сначала печатает ненулевые элементы, затем объединяет с нулевыми элементами
@(a)____
создать анонимную функцию с одним входным аргументомa
[___,___]
объединяет горизонтальные векторы внутри скобок, разделенных запятымиa(a~=0)
возвращает вектор со всеми ненулевыми элементами вектораa
a(a==0)
возвращает вектор со всеми нулевыми элементами вектораa
источник
Haskell, 26 байтов
Возьмите все ненулевые числа, за которыми следуют все нули. Фильтрация констант (здесь:
0
) является довольно коротким, используя список понимание:[0|0<-x]
.источник
Zsh, 22 байта
(входные данные передаются в качестве аргументов скрипту / функции (
$@
или$argv
массиву), вывод на стандартный вывод в виде списка, разделенного пробелами, перевод строки завершается)<<< string
: здесь-строка здесь передается как стандартная$NULLCMD
команда (cat
по умолчанию).${@:#0}
$@
за исключением того, что элементы равны 0.${(M)@:#0}
обратное из вышеизложенногоЭто предполагает (как и некоторые другие ответы здесь), что все нули на входе выражаются как
0
(нет,00
ни,0x0
ни36#0
).источник
Javascript,
525451 байтисточник
Mathematica, 14 байтов
источник
Sort[#!=0&]
должно быть достаточно.APL: 8 байт
~ 0 удалить нули из (читать «без 0»)
(⍴a) исходной длины (читай «shape of»)
↑ дополняет a без нулей до первоначальной длины a
Попробуй это в http://ngn.github.com/apl/web/index.html
Данные испытаний: a ← 1 0 1 2 3 4 0 1 0 0 0 0 1 2 3 4 5
источник
⍴↑{⍵~0}
и это даже короче.Java 7, 78 байт
Я не уверен, почему другие записи Java используют строки. Если вы хотите отфильтровать целочисленный массив, лучше всего использовать целочисленный массив. Это изменяет ввод на месте, сохраняя два индекса, а затем просто заполняя оставшиеся слоты нулями.
источник
o
сint c=0,o;for(o:a)...
. Вы также можете преобразовать в лямбда-синтаксис Java 8:a->{int c=0;for(int o:a)a[o==0?c:c++]=o;for(;c<a.length;a[c++]=0);}
и указать, что он ожидает ввода в виде массива int.Common Lisp, 46 байт
Сортируйте массив так, чтобы для каждой пары (a, b) у нас было a <b, если b равно нулю. Когда ни <b, ни b <a , сортировка стабильна: исходный порядок между элементами сохраняется.
Я также попытался с помощью configure-array и remove , но это было слишком долго:
источник
PHP,
73717052494846 байт - БОЛЬШОЕ благодаря Исмаилу Мигелюисточник
$v==0
может быть заменен на!$v
, экономя 2 байта.foreach($argv as$v)$v?$f.=" $v":$b.=" $v";echo$f.$b;
. Это ... некоторые байты, я не знаю ...foreach($a as$v)$v?print("$v "):$b.="$v ";echo$b;
для более аккуратного образа, который выглядит точно так жеУтилиты Bash + GNU, 23
Предполагается, что ввод - это разделенные новой строкой записи в файле с именем
a
. Оценка включает +1 для этого имени файла.источник
Perl 5, 26 байт
23 плюс три за
-an
(-E
бесплатно)Спасибо Деннису за напоминание о том
-a
, что он спас два байта.источник
CJam, 6 байтов
Анонимная функция. Сортировка с использованием «является ли элемент нулем» в качестве ключа.
источник
MATL , 7 байт
Попробуйте онлайн!
источник
Серьезно, 12 байт
Попробуйте онлайн!
Объяснение:
источник
Свифт , 13 байт
источник
Perl6, 11 байт
Создает блок - который можно вызвать в массиве:
Хотя было бы более естественно (и короче) написать:
Как это работает: если процедура сортировки perl6 вызывается с блоком, который принимает только один аргумент, элементы списка сортируются в соответствии с
by($a) cmp by($b)
. В этом случае блок является!*
, т. Е. Отрицанием любого оператора .Я замечаю, что:
источник
TeX (простой формат), 160 байт
Сделайте
0
символ активным (то есть заставьте интерпретатор обработать его как команду), затем определите эту команду, чтобы пропустить символ и увеличить счетчик. В конце строки выведите столько нулей, сколько было подсчитано.Сохраните это как
zero.tex
и передайте ввод через командную строку с этой командой:(Новые строки добавлены для ясности)
источник
J, 4 байта
Объяснение:
Функция сортировки в J гарантированно будет стабильной согласно спецификации.
Альтернативное решение, 6 байтов:
источник
Солома ,
3029 байтИспользуйте кодировку CP437
объяснение
Попробуйте онлайн! (Добавлен код для проверки всех тестовых случаев)
источник
JavaScript ES6, 16 байт
Работает на Firefox
источник
Рубин , 25 байт
Попробуйте онлайн!
источник
05AB1E ,
1514 байтовКод:
Объяснение:
Использует кодировку CP-1252. Принимает массив как это:
источник