Эта проблема уже описывает дропсорт. Тем не менее, я немного ленив, и мне действительно нужно, чтобы мой массив был немного более отсортирован, чем раньше, его не нужно сортировать полностью .
В Drop Sort мы отбрасываем каждый элемент меньше, чем любой элемент перед ним. В Lazy Drop Sort мы отбрасываем каждый элемент меньше, чем строго предшествующий ему.
Вот пример. Рассмотрим следующий массив:
8 6 9 9 7 2 3 8 1 3
Давайте отметим каждый элемент меньше, чем предыдущий.
8 6 9 9 7 2 3 8 1 3
^ ^ ^ ^
Обратите внимание, как ни 3
было отмечено, ни последний 8
. Все они больше, чем один элемент слева от них.
Завершив алгоритм, удалив отмеченные элементы, получим:
8 9 9 3 8 3
Это в основном выглядит более сортированным. Своего рода. Мне лень.
Ваша задача, как вы, возможно, уже поняли, состоит в том, чтобы реализовать этот алгоритм.
Ввод - это массив не менее 1 положительного целого числа от 1 до 9, поэтому вы можете также взять строку цифр.
Это код-гольф , побеждает меньше байтов!
Дополнительные тестовые случаи:
1
1
1 2 3
1 2 3
5 3 1
5
1 2 3 2 1
1 2 3
1 1 1 9 9 9 1 1 1 9 9 9 1 1 1
1 1 1 9 9 9 1 1 9 9 9 1 1
9 9
9 9
5 2 4 2 3
5 4 3
Ответы:
Шелуха , 4 байта
Попробуйте онлайн!
объяснение
источник
JavaScript (ES6),
2825 байтСохранено 3 байта благодаря @Shaggy
Попробуйте онлайн!
источник
n=>p<=n
выглядел бы потрясающе ;-)(n=p)=>p<=(p=n)
отлично работает;)p
в первый раз, когда он еще не определен?a
изначально установлен на входной массив иa-1
может привести кNaN
(если он не содержит единственное целое число, в этом случае он приводится к этому целому числу).R , 27 байт
Попробуйте онлайн!
источник
MATL ,
98 байтСохранено один байт благодаря Джузеппе.
Попробуйте онлайн!
Объяснение:
источник
Perl 5 .10.0 +
-nl
, 16 байтПопробуйте онлайн!
источник
perl6 -ne '$/>$_||.say;$/=$_'
Haskell, 29 байт
просто простое понимание списка.
источник
Japt ,
87 байтСохранено 1 байт благодаря @Oliver
Проверьте это онлайн!
Альтернативы:
источник
Stax , 5 байт
Запустите и отладьте это онлайн
Распаковывая, распаковывая и комментируя код, мы получаем это.
Запустите этот
Упорядочить инструкции неудобно, но есть причина для этого. Упаковка исходного кода Stax не всегда дает один и тот же размер вывода для одного и того же размера ввода. По сути, у вас есть шанс сохранить байт, если последний символ источника имеет более низкий код символа. Ну,
!
есть один из самых низких кодов, которые вы можете получить для печатного символа. (В частности 33) Многие 6-байтовые программы ASCII Stax не могут упаковать меньше. Но если они заканчиваются на!
, то они могут. Таким образом, причина этого конкретного порядка команд состоит в том, чтобы гарантировать, что логическое не заканчивается в конце программы.источник
J, 12 байт
Объяснение:
Примеры:
Попробуйте онлайн!
источник
Желе , 6 байт
I / O находится на строках.
Попробуйте онлайн!
источник
×
не должен работать на повторение символов, но это работает.Java 8,
665548 байт-11 байт после подсказки от @ OlivierGrégoire .
-7 больше байтов благодаря @ OlivierGrégoire .
Объяснение:
Попробуйте онлайн.
источник
~0
когда это в принципе-1
. Лично я бы выбрал более интуитивное решение, если бы количество байтов было такой же длины (за исключениемwhile(...)
vsfor(;...;)
, в этом случае я предпочитаюfor
. Хотя, спасибо еще за -7 байт. :)Integer.MIN_VALUE
(что тогда1<<31
, я думаю ...) ;-)Октава , 21 байт
Попробуйте онлайн!
Объяснение:
Возьмите вектор в
x
качестве входных данных и создайте вектор[0, diff(x)<0]
, гдеdiff(x)
есть вектор с разницей между всеми соседними элементами. Оставьте только те, которые являются отрицательными, сравнивая его с нулем, давая нам список всех элементов, которые мы хотим отбросить.Затем мы выбираем элементы из входного вектора, которые мы хотим сохранить.
источник
V , 25 байтов
Попробуйте онлайн!
HexDump:
Худший язык для работы. Но я сделал это за вызов .
источник
k$yl+@"òç-/d
испанский?k$yl+@"òç-/d
может быть в широком смысле переведено как Ой, кто, черт возьми, оставил эту дверь шкафа открытой?Треугольность , 71 байт
Попробуйте онлайн!
Как это работает?
источник
)IEL)rFD)2+)IE)w+h)2_stDO={M)IEm}
расширена до вашего текущего ответа?)IEL)rFD)2+)IE)w+h)2_stDO={M)IEm}
будет ваш код, он будет расширяться до вашего текущего шаблона, а затем выполнять 2D-команды на этом расширенном шаблоне. РЕДАКТИРОВАТЬ:.....).....\n....IEL....\n...)rFD)...\n..2+)IE)w..\n.+h)2_stDO.\n={M)IEm}...
и.....).........IEL.......)rFD).....2+)IE)w...+h)2_stDO.={M)IEm}...
и)IEL)rFD)2+)IE)w+h)2_stDO={M)IEm}
все три будут одной и той же программы.Python , 40 байт
Попробуйте онлайн!
Ввод в виде набора символов.
Python 3 , 41 байт
Попробуйте онлайн!
Строковый ввод.
Python 2 , 41 байт
Попробуйте онлайн!
Строковый ввод, просто потому что строки больше чем,
id
а числа меньше.источник
Wolfram Language (Mathematica) , 33 байта
Попробуйте онлайн!
Как это работает
Код
# - {0}~Join~Most@#
превращает массив{a,b,c,d,e,f}
в{a,b-a,c-b,d-c,e-d,f-e}
. ПрименениеArg
к этому устанавливает отрицательные числа кPi
и неотрицательные числа к0
.Pick[#, ..., 0]&
выбирает записи#
where...
has a0
: в нашем случае, именно те элементы, которые дают неотрицательное число, когда вы вычитаете предыдущий элемент. Другими словами, это именно те записи, которые мы хотим сохранить при lazydropsorting.источник
Чудо , 27 байт
Пример использования:
объяснение
Безголовая версия:
Prepend
0
, получить список последовательных пар, сохранить элементы списка, где первое число <= второе число, получить второе число каждой пары.источник
Wolfram Language (Mathematica) , 20 байтов
Попробуйте онлайн!
объяснение
Input = {8, 6, 9, 9, 7, 2, 3, 8, 1, 3}
Группируйте последовательные элементы, которые строго уменьшаются:
{{8, 6}, {9}, {9, 7, 2}, {3}, {8, 1}, {3}}
Возьмите первый элемент каждого:
{8, 9, 9, 3, 8, 3}
источник
##>0
причудливо и все такое, но здесь ничего не сохраняется#>#2
;) (что заставит вашу программу работать с произвольными целыми числами, хотя это и не требуется).Python 2 ,
52464542 байтаПопробуйте онлайн!
Добавлено:
источник
SWI-Пролог, 44 байта
Использование: Вызовите « List -X», где List - заключенный в скобки список, разделенный запятыми, например [1,4,5,1,11,6,7].
источник
APL + WIN, 14 байтов
Запрашивает ввод на экран вектора целых чисел.
источник
05AB1E , 6 байтов
Попробуйте онлайн!
объяснение
источник
Котлин , 39 байт
Попробуйте онлайн!
Отфильтруйте элементы, которые являются либо первым элементом (индекс == 0, либо даже более короткий индекс <1) ИЛИ текущее значение больше или равно предыдущему элементу (a [i-1]).
источник
APL (Dyalog Unicode) , 11 байт
Попробуйте онлайн!
Это на самом деле очень похоже на ответ Грэма, но в Dyalog, и независимо разработано. Также более симметрично.
источник
К4 , 10 байт
Решение:
Пример:
Объяснение:
Найти индексы, где элемент меньше, чем предыдущий, удалить эти индексы из ввода
источник
Атташе , 24 байта
Попробуйте онлайн!
объяснение
Mask
выбирает все элементы из второго аргумента, которые соответствуют истинным элементам в первом аргументе.1'(Delta!_>=0)
вычисляет индексы, которые соответствуют элементам, которые должны быть в конечном массиве.Другие попытки
28 байт (без точек):
~Mask#(1&`'##Delta#`>=#C[0])
32 байта:
{Mask[1'(&`<= =>Slices[_,2]),_]}
источник
C # (.NET Core) , 33 + 18 = 51 байт
Попробуйте онлайн!
в основном это утверждение, где x - это первое целое в массиве, или оно больше или равно предыдущему числу, сохраните его. Остальное брось.
источник
IEnumerable
. НетToArray()
необходимостиSystem.Collections
, и это сведет на нет все байты, сохраненные для удаленияToArray()
.IEnumerable
в ответе вы не будете ссылаться , просто используйте его в качестве типа возвращаемого значения.Swift 4 ,
5655 байтПопробуйте онлайн!
объяснение
источник
Желе , 9 байт
Попробуйте онлайн!
Это кажется довольно громоздким, не удивлюсь, если есть лучший способ.
источник
Brain-Flak ,
136, 120 байтЗдесь он отформатирован и «читабелен» .
Попробуйте онлайн!
источник