задача
Обратные серии нечетных чисел в заданном списке от 2 до 2 15 неотрицательных целых чисел.
Примеры
0 1
→ 0 1
1 3
→ 3 1
1 2 3
→ 1 2 3
1 3 2
→ 3 1 2
10 7 9 6 8 9
→ 10 9 7 6 8 9
23 12 32 23 25 27
→ 23 12 32 27 25 23
123 123 345 0 1 9
→ 345 123 123 0 9 1
Ответы:
Python 2,
756863 байта5 байтов благодаря Денису.
И я обошел Денниса .
Кредиты Byeonggon Lee за ядро алгоритма.
Идео это!
Старая версия: 75 байт
источник
print
не нуждается в паренсе Кроме того, вы используете толькоa
один раз, поэтому нет необходимости в переменной.Python 2,
797573 байтаЭто функция, которая изменяет свой аргумент на месте. Второй уровень отступа - табулятор.
Проверьте это на Ideone .
источник
APL,
2120 байтПопробуй это || Все тесты
Объяснение:
Редактировать: Сохранено
~
благодаря законам де Морганаисточник
Haskell,
4644 байтаСпасибо @xnor за распознавание сгиба и сохранение двух байтов.
источник
(h*)
! Вы можете сохранить байт в базовом регистре, написавf x=x
секунду, чтобы соответствовать пустому списку, хотя он выглядит какfoldr
еще более короткийh%p|(l,r)<-span(odd.(h*))p=l++h:r;foldr(%)[]
::foldr
конце концов! Спасибо.Желе , 10 байт
Попробуйте онлайн! или проверьте все контрольные примеры .
Как это устроено
источник
Python 2,
7875 байтСупер хакер :)
источник
k.i
?k.i=0
в последней строке. Это просто переменная.k
иk.i
связаны?k.i
является постоянной переменной между вызовамиk
. Рассматривайте его как импровизированное глобальное без использованияglobal
ключевого слова.Python3, 96 байт
Благодаря Leaky Nun сэкономлено много байтов!
источник
C 107 байтов
источник
MATL , 20 байтов
Ввод - это массив столбцов, использующий в
;
качестве разделителя.Попробуйте онлайн!
объяснение
Рассмотрим в качестве примера входной массив
[1;2;3;5;7;4;6;7;9]
. Первая часть кода,Tiodgv
преобразует этот массив в[1;1;1;0;0;1;0;1;0]
, где1
указывает на изменение четности . (В частности, код получает четность каждой записи входного массива, вычисляет последовательные различия, преобразует ненулевые значения в1
и добавляет a1
.)Затем
Ys
вычисляет накопленную сумму , отдавая[1;2;3;3;3;4;4;5;5]
. Каждое из этих чисел будет использоваться как метка , на основе которой будут сгруппированы элементы ввода . Это делается путемG8XQ!
, который разбивает входной массив на массив ячеек, содержащий группы. В этом случае это дает{[1] [2] [3;5;7] [4;6] [7;9]}
.Остальная часть кода iterate (
"
) в массиве ячеек. Каждый составляющий числовой массив помещается в@g
.to
делает копию и вычисляет ее соотношение . Если (?
) результат верен, то есть содержимое массива нечетно, массив переворачивается (P
).Стек неявно отображается в конце. Каждый числовой вертикальный массив отображается, давая список чисел, разделенных новыми строками.
источник
Pyth, 14 байт
Контрольные примеры
источник
J ,
333130 байтиспользование
источник
C #,
179178177 байтЯ использую C # лямбду. Вы можете попробовать это на .NETFiddle .
Код меньше минимизировать:
Престижность Byeonggon Ли для оригинального алгоритма.
источник
foreach(var
и изменить,if(n%2==1)
чтобыif(n%2>0)
сохранить 2 байта (или фактически 1, потому что ваш текущий ответ составляет 179 байтов вместо 178).Pyth,
2928 байтТестирование.
Прямой перевод моего ответа на python (когда перевод с python на pyth стал хорошей идеей?)
источник
TSQL 118 байт
скрипка
источник
Clojure, 86 байт
Вот версия без гольфа
По сути, он проходит через входную последовательность и, если встречает четное число, добавляет число и пустой вектор, в противном случае, если это нечетное число, он заменяет последний элемент этим номером плюс то, что было в последнем элементе.
Например, для этого seq
2 4 6 1 3 7 2
это выглядит так:[]<=2
[2 []]<=4
[2 [] 4 []]<=6
[2 [] 4 [] 6 []]<=1
[2 [] 4 [] 6 [1 []]]<=3
[2 [] 4 [] 6 [3 [1 []]]]<=7
[2 [] 4 [] 6 [7 [3 [1 []]]]]<=2
[2 [] 4 [] 6 [7 [3 [1 []]]] 2 []]
И затем сглаживание этого вектора дает правильный вывод. Вы можете увидеть это онлайн здесь: https://ideone.com/d2LLEC
источник
JavaScript (ES6)
7066Редактирование 4 байт сохраненного ТНХ @Neil
источник
:r=r.concat(o,x,o=[]),
экономит пару байт. Я думаю , то вы можете пойти на , чтобы сохранить еще два , как это:a=>[...a,[]].map(x=>x&1?o=[x,...o]:r=r.concat(o,x,o=[]),r=o=[])&&r
....o
?Stax ,
1510 байт CP437Попробуйте онлайн!
Связали желе! Так грустно, что упаковка спасла только один байт.
Распакованная версия с 11 байтами:
объяснение
{|e_^*}
это блок, который отображает все четные числаn
вn+1
, и все нечетные числаn
в0
.источник
Шелуха , 7 байт
Попробуйте онлайн!
объяснение
источник
Рубин , 51 байт
Попробуйте онлайн!
Некоторые небольшие вариации:
источник
Perl 5 с
-p
, 42 байтаПопробуйте онлайн!
источник