Вдохновленный этим вопросом переполнения стека: сортировка списка: числа по возрастанию, буквы по убыванию . Ваша задача - решить следующую проблему, и, поскольку это код-гольф , вы должны делать это как можно меньше байтов.
Вы должны взять список объектов , как входные данные, содержащие буквы (любую разумную форма: string
, char
и т.д.) и число. Затем вы должны отсортировать числа в порядке возрастания, а буквы в порядке убывания. Тем не менее, вы должны держать буквы в буквенных позициях и цифры в цифрах. Например, если список:
[L, D, L, L, D, L]
Список вывода должен быть в виде:
[L, D, L, L, D, L]
Работать через
Входные данные: ['a', 2, 'b', 1, 'c', 3]
- Сортировать числа в порядке возрастания:
[1, 2, 3]
- Сортировка букв в порядке убывания:
['c', 'b', 'a']
- Присоединяйтесь к ним, но сохраняйте порядок:
['c', 1', 'b', 2, 'a', 3]
правила
- Список будет содержать только буквы и цифры.
- Список может быть пустым.
- Список может содержать только буквы или только цифры.
- Если ваш язык не поддерживает массивы смешанного типа, вы можете использовать цифры вместо цифр. Обратите внимание, что если ваш язык поддерживает это, вы должны использовать смешанные типы.
- Письма будут только
[a-z]
или[A-Z]
, вы можете выбрать, какие из них. - Письма сортируются
a
является самым низким,z
будучи высшим тa = 1, z = 26
. - Стандартные лазейки запрещены.
- Ввод / вывод может быть любым стандартным способом, в том числе в виде строки.
Контрольные примеры
[5, 'a', 'x', 3, 6, 'b'] -> [3, 'x', 'b', 5, 6, 'a']
[ 3, 2, 1] -> [ 1, 2, 3 ]
[ 'a', 'b', 'c' ] -> [ 'c', 'b', 'a' ]
[] -> []
[ 2, 3, 2, 1 ] -> [1, 2, 2, 3]
Поскольку это код-гольф, выигрывает самый короткий ответ в байтах!
code-golf
array-manipulation
sorting
TheLethalCoder
источник
источник
Ответы:
Сетчатка , 10 байт
Попробуйте онлайн!
O
Этап в Retina может непосредственно осуществлять вид селективной сортировки , требуемой этим вызовом.Здесь первая строка сортирует цифры, а вторая строка - не цифры наоборот.
источник
Python 2 ,
5352 байта-2 байта благодаря g.rocket
-1 байту благодаря Джонатану Фреху
Попробуйте онлайн!
Вначале
sorted
список будет содержать числа, а затем символы типа[3, 5, 6, 'a', 'b', 'x']
, а затем использовать ихe<x
для фильтрации того, что является числом, а что символом. В python любое число меньше, чем список (входные данные), а список меньше строки.источник
IndexError: pop index out of range
. Первое решение сработало.1-(e<'`')
должно быть(e<'`')-1
. Вы просто разместили их в неправильном порядке. Кстати, вы меня ниндзя: / У меня было этоe>x
APL (Dyalog) ,
2726 байтовОжидает символы в верхнем регистре
Попробуйте онлайн!
Это всего лишь два приложения формы
f@g
, применить функциюf
к пунктам, обозначеннымg
.При первом использовании приложения мы:
f
:⍒⊃¨⊂
нисходящие сорта (⍒
) каждый подборщик (⊃¨
) от всего аргумента (⊂
).g
:(e←∊∘⎕A)
members (∊
) of (∘
) A lphabet (⎕A
) и store (←
) этой функции какe
.Для второго использования приложения мы:
f
:⍋⊃¨⊂
восходящие сорта (⍋
) каждый подборщик (⊃¨
) от всего аргумента (⊂
).g
:(~e)
not (~
) члены алфавита (e
; функция, которую мы сохранили раньше)источник
83=⎕DR¨⍵
3=10|⎕DR
для целых чисел?⌊0.1×⎕DR
дает количество бит, используемых для представления каждого скаляра, за исключением указателей, которые зависят от архитектуры, но всегда равны 326. Таким образом, все числа являются2|⎕DR
.JavaScript (ES6),
715147 байтСохранено 20 байтов, просто используя
sort()
, как предложено @JustinMarinerСохранено еще 4 байта благодаря @CraigAyre
Используя подход, аналогичный ответу Python Рода :
Контрольные примеры
Показать фрагмент кода
источник
sort
функцию и просто использоватьsort()
ее самостоятельно? Кажется, сортировать так же без функции (в Chrome / FF / Edge).sort()
получится. Но так как мы ограничены цифрами, вы правы: это работает. Благодарность!a.sort()
x
.map(n=>a.sort()[1/n?'shift':'pop']())
+n
можно использовать вместо1/n
Р ,
8376 байт-7 байт благодаря Miff
Это то же самое, что и ниже, но оно допускает ввод смешанного типа как вектор,
list
а не какatomic
вектор (который будет вводить все как символы со смешанными типами).Попробуйте онлайн!
R ,
6861 байт-7 байт благодаря Miff
Анонимная функция. В этом случае все цифры приводятся к символам.
n[-d]
это массив без цифр. ВозвращаетNULL
(пустой список) при пустом вводе.Попробуйте онлайн!
источник
d=n%in%0:9
Japt ,
1815 байтСпасибо @Shaggy за -3 байта и за помощь в исправлении массивов с
0
s.Первая строка намеренно оставлена пустой.
Попробуйте онлайн! используя
-Q
для просмотра отформатированного массива.объяснение
Первая строка пуста, чтобы избежать перезаписи входного массива.
[5, 'a', 'x', 3, 6, 'b']
Сделайте копию, уплощая (
c
) входной массив, затем сортируйте (ñ
) со строками, представленными их символами (c
). Это хранится вV
.[3, 5, 6, 'a', 'b', 'x']
Затем сопоставьте входной массив с помощью функции ...
Превратить числа в двоичные строки (правда) или строки в
""
(ложь) (¤
). Если верно, удалите из началаV
(v
), в противном случае удалите из конца (o
).источник
Vo
иVv
вокруг. Я убежден, что должен быть более короткий путь без троичного.o
бы можно было удалить с самого начала с отрицательными значениями или что-то ...JavaScript,
164162158142 байтаредактировать 1: 2 байта меньше после удаления избыточного назначения v.
редактируйте 2: 4 байта меньше благодаря TheLethalCoder.
редактировать 3: 16 байт меньше благодаря блестящим подсказкам от Джастина Маринера
Это мой первый раз в код-гольфе, так что он, безусловно, может быть улучшен ... Но все же, стоит попробовать.
Программа выполняет вариант сортировки выбора, который учитывает только значения того же типа, что и текущий (замена только числа и числа или буквы и буквы)
Читаемая форма:
источник
for(j=i+1;j<l;j++)
->for(j=i++;++j<l;)
и убрать приращение во внешнем цикле.j
как я предложил, я не видел , использоватьi
дальше просто изменитьx[i]=x[m]
слишкомx[i++]=x[m]
x[i++]=x[m]
... Спасибо!C ++ 17 (gcc) , 219 байт
Попробуйте онлайн!
Вряд ли конкурентоспособен. Но я должен поддерживать массивы смешанного типа? FINE.
Принимает массив вариантов в стиле диапазона и изменяет его на месте. Копирует ввод в два отсортированных набора, а затем обратно в массив ввода / вывода.
источник
void *
C;) Но, да, интересно посмотреть, как решение прыгает через такой обруч.#include
sMathematica, 203 байта
Попробуйте онлайн!
источник
Желе , 14 байт
Попробуйте онлайн!
В основном это порт решения Python Рода .
источник
Pyth ,
1211 байтовПопробуйте онлайн! или попробуйте тестовый набор.
объяснение
источник
Python,
145139130 байт6 байтов сохранено благодаря @officialaimm
9 байтов сохранено благодаря @Chris_Rands
Попробуйте онлайн!
источник
type(x)==str
я бы сэкономил несколько байтов, используя,isinstance(...)
я думаю,05AB1E , 17 байт
Попробуйте онлайн!
Использование замыкания на самом деле было хуже:
Σ©Ç®ai0<*}}¹SaJsvyay.;
источник
Python 3, 77 байт
Этот ответ основан на комментарии, в котором говорится, что вы можете использовать «1», «2» и т. Д., Если символы и цифры не сопоставимы в языке. 'a' и 1 не сопоставимы в Python 3.
источник
q / kdb +,
5453 байтаРешение:
Примеры:
Объяснение:
Найти символы в списке, отсортировать по убыванию, найти длинные в списке, отсортировать их по возрастанию, объединиться, чтобы получить список, например
("x";"b";"a";3;5;6)
, затем назначить отсортированные значения их первоначальным позициям в списке, например, в0 3 4 1 2 5
.Игра в гольф просто переключение из Q ключевых слов (
each
,where
иnot
) для ихk
эквивалента (что требует от них быть завернуты в скобках).Правки
desc
источник
C (gcc) ,
125113110 байтПопробуйте онлайн!
Разъяснение:
Письма ожидаются в верхнем регистре.
источник
PHP, 66 байт:
принимает входные данные из аргументов командной строки, печатает строку. Запустить с
-nr
или попробуйте онлайн .Выдает предупреждение в PHP 7.1; заменить
a&
с ,""<
чтобы исправить.источник
Mathematica, 107 байт
источник
C # (.NET Core) , 171 байт
Количество байтов также включает в себя:
Попробуйте онлайн!
Объяснение:
источник
Perl 5 , 107 + 1 (-n) = 108 байт
Попробуйте онлайн!
источник
Рубин , 265 байт
Попробуйте онлайн!
Первый таймер здесь, Мое решение определенно не лучшее. Но так как это мой первый ответ, я подумала в публикации просто для удовольствия.
Смотря вперед, чтобы увидеть лучшие ответы Руби, чтобы увидеть, что является лучшим подходом. Я надеюсь, что я улучшу в будущем ответы =)
Удобочитаемый
источник
Haskell, 108 байт
Там могут быть более короткие пути, но я просто должен был попробовать это с
Lens
библиотекой.Я мог бы определить,
f
что это просто композиция из двухi
вызовов, но я все равно должен был бы применитьx
к нему, чтобы избежать ошибки типа из-за ограничения мономорфизма. Обратите внимание, что типf
isTraversable t => t Char -> t Char
может использоваться как сString
s, которые являются спискамиChar
s, так и с массивамиChar
s.Вот тестовые случаи:
источник
Python 3, 91 байт
источник
Clojure, 151 байт
Пример:
Это вычисляет накопленную
сумму суммцелых чисел и символов и использует ее для поиска правильного элемента из отсортированного списка элементов соответствующего типа.источник
APL (Dyalog) , 26 байтов
(использует
⎕IO=1
)Попробуйте онлайн!
источник