Переставьте данный список так, чтобы все нечетные числа стояли перед всеми четными числами. Кроме того, для этого требования список вывода может быть в любом порядке.
Входные данные будут содержать только целые числа, но они могут быть отрицательными и могут быть дубликатами, и они могут появляться в любом порядке.
Самое короткое решение побеждает.
Контрольные примеры
[1,2]
→ [1,2]
[2,1]
→ [1,2]
[1,0,0]
→ [1,0,0]
[0,0,-1]
→ [-1,0,0]
[3,4,3]
→ [3,3,4]
[-4,3,3]
→ [3,3,-4]
[2,2,2,3]
→ [3,2,2,2]
[3,2,2,2,1,2]
→ [1,3,2,2,2,2]
или[3,1,2,2,2,2]
[-2,-2,-2,-1,-2,-3]
→ [-1,-3,-2,-2,-2,-2,]
или[-3,-1,-2,-2,-2,-2,]
[]
→ []
Ответы:
05AB1E , 2 байта
Попробуйте онлайн!
источник
Pyth ,
43 байта-1 байт благодаря isaacg
Попробуйте онлайн!
вычеркнуто 4 все еще регулярно 4
источник
oiI2
.iD2
?oi2
J , 5 байт
Попробуйте онлайн!
\:
сортировать по убыванию2&|
мод-2источник
R ,
3024 байтаПопробуйте онлайн!
-6 байт благодаря JayCe
источник
C ++,
797664 байтаЭта функция принимает пару итераторов (которые должны быть итераторами с произвольным доступом) и постоянно перемещает их навстречу друг другу. Когда
a
указывает на нечетное число, оно продвигается. В противном случаеa
указывает на четное число;b
уменьшается, иiter_swap
'сa
. (Мы используем своп XOR, который избавляет нас от необходимости включать<algorithm>
- или<utility>
дляstd::swap
).Существуют ненужные перестановки, когда
b
указывается четное число, но мы играем в гольф, а не снижаем эффективность!демонстрация
Неконкурентный ответ
Естественный метод C ++ есть
std::partition
, но он выходит на 83 байта:источник
#include
директивы. Моя математика отстой, хотя ^^. Вы можете заменить!=
на-
, сохранив 1 байт. Мне нравится твой подход, он умный!while(a<b)
если это более удобно, чемa!=b
использованиеa-b
версии @ OOBalance .algorithm
сregex
: codegolf.stackexchange.com/a/150895Japt , 2 байта
Попробуйте онлайн!
источник
Perl 6 , 12 байт
Попробуйте онлайн!
Какой-то код, сортирующий ввод по паритету, с нечетными числами в первую очередь.
%
Вместо этого вы можете сначала удалить четные числа. Обратите внимание, что «что угодно» - это название анонимной функции.источник
MATL, 6 байтов
Попробуйте это на MATL Online
С другой стороны:
Попробуйте это на MATL Online
источник
Python 2 ,
3736 байтПопробуйте онлайн!
1 байт подсказка мистеру Xcoder .
источник
~
должен работать вместо1-
.Stax , 5 байт
Запустите и отладьте его
Объяснение:
источник
Haskell ,
2322 байтаПопробуйте онлайн! Это эквивалентно
-1 байт благодаря Линн
Другие подходы:
источник
import Data.Semigroup
?(<>)
является частью Prelude . Поскольку TIO по-прежнему работает с более старой версией, импорт необходим там. Но вы правы, я должен был упомянуть об этом прямо.k odd<>k even;k=filter
сохраняет байт.Атташе , 11 байт
Попробуйте онлайн!
объяснение
Even
возвращаетtrue
четные числа и вfalse
противном случае.SortBy
рангиfalse < true
(путем числового приведения к0 < 1
), таким образом, помещая нечетные числа перед четными.источник
JavaScript (Node.js) , 29 байт
Попробуйте онлайн! Сохраните 4 байта, поддерживая только положительные значения, используя
b%2-a%2
. Если вы напишите это как:тогда он будет работать со всеми видами старых реализаций JavaScript, которые не сортировались стабильно.
источник
a=>a.sort((a,b)=>b&1-a&1)
работает?b&(1-a)&1
.a=>a.sort(a=>++a&1)
Короче :)T-SQL, 26 байт
Использует побитовый оператор AND «&» для сравнения последней цифры с 1.
РЕДАКТИРОВАТЬ: побитовый НЕ затем короче, чем добавление 1. РЕДАКТИРОВАТЬ 2: изменить порядок, чтобы разрешить удаление пространства.
источник
ORDER BY~i&1
Желе , 3 байта
Попробуйте онлайн!
Похоже, что один из наиболее часто используемых атомов - это даже четный (который сделал бы это 2 байта), без него мы должны повернуть вспять, я полагаю ...
источник
JavaScript,
2220 байтa=>a.sort(a=>!(a%2))
Попробуйте онлайн!
источник
a
.0
включен в массив.[1,2,3,4,5,6,6,-1,-2,-3,-4]
. JavaScriptarray.sort
странный.PHP , 55 байт
~ 14 месяцев спустя, и теперь я немного лучше играю в гольф:
Попробуйте онлайн!
PHP (> = 5,4),
8482 байта(-2 байта, спасибо Исмаилу Мигелю )
Чтобы запустить это:
Пример:
Или попробуйте онлайн!
источник
$a=array_slice($argv,1);
используйтеarray_shift($a=&$argv);
, что экономит 1 байт. Кроме того , удалите пробел перед$a
дюймомjoin(' ', $a)
, экономя другие байты. Кроме того, PHP 5.3 дает разные результаты. Вы должны указать, для какой версии PHP это решение.array_shift
идею и указание на космическую ошибку. Я не уверен, как я пропустил пробел: я также добавил в заголовок PHP> = 5.4.array_shift
когда я попробовал это и работал.Красный , 42 байта
Попробуйте онлайн!
Если нам нужно учитывать отрицательные значения:
Красный , 43 байта
Попробуйте онлайн!
источник
Шелуха , 4 байта
Попробуйте онлайн!
объяснение
источник
Скала , 18 байт
источник
C #, 23 байта
На самом деле довольно прямолинейно: это в основном конвертирует числа в логические значения, а
true
значит, что число четное иfalse
нечетное. Потомуtrue
что выше, чемfalse
четные числа появляются первыми.Отформатированная версия выглядит так:
И вы можете проверить это так:
Что приводит к следующему:
источник
JavaScript, 23 байта
На 6 байт короче, чем ответ @ Neil на одном языке: D
Объяснение:
Переданная функция
sort
заботится только о первом параметре. Если оно нечетное, возвращается-1
(результат-(n&1)
). В противном случае (когда-(n&1)
дает0
) он возвращается1
.Попробуйте онлайн!
источник
Python , 35 байт
Попробуйте онлайн!
Сортирует по функции
x -> (-1)**x
, которая дает-1
нечетные и1
четные.источник
JavaScript (Chrome v67) -
241923 байтаИспользование,
&1
а неMath.abs()%2
был украден из @Neil. Благодарность!Спасибо @Shaggy за то, что показал мое хакерское 19-байтовое решение недействительным. Если кто-то хочет это:
Зависит от того, как браузер обрабатывает взломанное возвращаемое значение0
. Chrome v67, после 100000 итераций случайных массивов, никогда не сортировал это неправильно. Я очень уверен, что это работает - и это зависит от конкретного алгоритма сортировки, который также использует Chrome. (Это может работать в других браузерах, это не главное)a=>a.sort(a=>++a&1)
источник
[-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]
в моей консоли Chrome 67, вывода[7,-5,-3,17,-1,15,1,13,3,11,5,9,2,19,14,-4,6,18,-2,16,0,10,8,12,4]
.JavaScript, 21 байт
Попробуйте онлайн
источник
PowerShell ,
2219 байтПопробуйте онлайн!
Принимает ввод через splatting, например,
$a=(3,4,3); .\sort-odd-numbers-first.ps1 @a
который в TIO проявляется как отдельные аргументы для каждой записи.Как и некоторые другие ответы здесь,
Sort-Object
можно сравнить на основе выражения. Здесь используется выражение!($_%2)
, то есть шансы сортируются,$false
а четные сортируются$true
. Благодаря тому, как булевы значения сравниваются, значения Falsey сортируются первыми. Это перемещает шансы в начало вывода, а четные - в конец.Sort-Object
является стабильным, поэтому порядок отдельных элементов в соответствующих категориях не изменяется (как в примере TIO).-3 байта благодаря маззи.
источник
$a=(3,4,3); .\sort-odd-numbers-first.ps1 @a
. Так$args|sort{!($_%2)}
что достаточно. Не так ли?Рубин , 23 байта
Попробуйте онлайн!
Объяснение:
sort_by
сортирует каждое число так, как если бы его значение было результатом блока (~i%2
)~x
эквивалентно-x-1
и имеет приоритет над%2
Нечетные числа будут сравниваться с
0
четными числами,1
поэтому нечетные числа будут отсортированы первыми.Едва ли связано: это работает на ruby из homebrew 2.5.1p57 (потому что он основан на небольшой ошибке), но только для неотрицательных целых чисел, 20 байтов
Объяснение:
Это использует,
sort
который ожидает блок, который принимает 2 значения и возвращает-1
,0
или в1
зависимости от того, больше ли первое, равно ли оно или второе больше.Приведенный здесь блок игнорирует второе значение и возвращает значение,
-1
если первое число нечетное или0
если оно четное.Он не гарантированно работает, но работает в некоторых (я думаю, ошибочных) реализациях.
источник
6502 подпрограммы машинного кода , 47 байтов
Ожидается указатель на массив чисел в
$fb
/$fc
и длина этого массива в$fd
. Управляет массивом на месте, чтобы все нечетные числа были впереди. Это независимый от позиции код, поэтому адрес загрузки не требуется.Поскольку 6502 является 8-битным чипом (поэтому инструкции имеют дело только с 8-битными значениями, с необязательной подписью), допустимый диапазон номеров равен
[-128 .. 127]
максимальному размеру массива256
.Прокомментировал разборку
Пример C64 ассемблерной программы с использованием подпрограммы:
Онлайн демо
Код в синтаксисе ca65 :
источник
Эликсир ,
3735 байтКод:
Расширенная версия:
Попробуйте онлайн!
источник
Clojure - 35 байт
Ungolfed:
источник
#(...)
. Также вы могли бы датьsort-by
попробовать, хотя представление уже существует.#()
анонимную функцию, но получил ошибку arity, так как два параметра были переданы, но только для ожидаемого / использованного, и%2
добавление в него добавило больше символов. Было бы интересно посмотреть, как это можно сделать.