Входные данные:
- Массив , содержащий три целых числа:
0
,1
и2
в любом порядке (то есть[2, 0, 1]
) - И строка длиной> = 2, содержащая только буквы алфавита (как строчные, так и прописные) и цифры (то есть
a1B2c3
)
Выход:
На основе массива мы сортируем и выводим строку.
Как это работает?
- Массив указует на приоритет заказа
a-z
,A-Z
и0-9
, первое существо0
; второе существо1
; и третье существо2
. - На основании этого можно упорядочить отдельные символы строки.
Пример:
- Массив:
[2, 0, 1]
- Строка:
a1B2c3
Основываясь на массиве, мы знаем, что приоритет нашего заказа равен 0-9a-zA-Z
.
Исходя из этого, мы можем преобразовать и выводить строку: 123acB
.
Правила соревнований:
- Для массива вы можете выбрать использование 0-индексированных или 1-индексированных входов, так что
[3, 1, 2]
это также допустимый вход, если вы предпочитаете использовать 1-индексированные массивы. - Строка (вход и выход) содержит только допустимые символы:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
. - Если ваш язык не поддерживает массивы (или если вы хотите), вы можете использовать строки вместо массивов для первого параметра (то есть
012
,[0,1,2]
и т.д.).
Основные правила:
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте придумать как можно более короткий ответ для «любого» языка программирования. - К вашему ответу применяются стандартные правила , поэтому вы можете использовать STDIN / STDOUT, функции / метод с правильными параметрами, полные программы. Ваш звонок.
- По умолчанию лазейки запрещены.
- Если возможно, добавьте ссылку с тестом для вашего кода.
- Также, пожалуйста, добавьте объяснение, если это необходимо.
Тестовые случаи:
[2, 0, 1] & a1B2c3 -> 123acB
[2, 1, 0] & aAaA909UuHWw9gh2 -> 02999AAHUWaaghuw
[2, 1, 0] & 6Bx43 -> 346Bx
[1, 0, 2] & jfjf33g -> ffgjj33
[0, 2, 1] & AbC13 -> b13AC
[1, 2, 0] & Qfl0l -> Q0fll
[0, 1, 2] & 9870abcABC -> abcABC0789
[0, 2, 1] & test123 -> estt123
[2, 0, 1] & WHAT -> AHTW
[2, 0, 1] & WhAt -> htAW
[1, 0, 2] & 102BACbac -> ABCabc012
code-golf
string
array-manipulation
sorting
Кевин Круйссен
источник
источник
"123"
ли правильный формат для первого параметра?123
,012
,[0,1,2]
,[0, 1, 2]
,0;1;2
или в зависимости от того вы предпочитаете.Ответы:
05AB1E ,
151412 байтКод:
Объяснение:
Использует кодировку CP-1252 . Попробуйте онлайн! ,
источник
²
и используя₂
вместо26
.Python 2,
6766 байтПроверьте это на Ideone .
источник
JavaScript (ES6), 87 байт
Если массив ввода дал приказ, а не приоритет, трех диапазонов (это только делает разницу для
[1, 2, 0]
и[2, 1, 0]
последствия которых меняются местами) , то это бы работало на 80 байт:Я неправильно понял вопрос и все еще получил 7 голосов с этим. Не стесняйтесь удалять свои возражения и вместо этого отдавайте их @CharlieWynn, которые предложили лучшую поправку к моему подходу.
источник
Array.sort
необязательный параметр функции, но это работает намного лучше.Желе , 13 байт
Попробуйте онлайн! или проверьте все контрольные примеры .
Как это работает
источник
Пиф,
171615 байтовТестирование.
Спасибо @FryAmTheEggman за байт и @Jakube за другой!
источник
'UT
вместоs'MT
.'UT
это ошибка,`UT
которая не приводит к той же строке.Javascript es6 77 байт
источник
?
s к каждому регулярному выражению, это гарантирует, что совпадение возвращает результаты (в основном пустые строки, но они в любом случае исчезают), избегая(||[])
, таким образом, экономя вам всего 3 байта.TSQL,
199191 байтGolfed:
Ungolfed:
скрипка
источник
APLX , 19 байт
⎕a⎕A⎕D
нижние верхние цифры(
...)[a]
изменения порядка в соответствии массива а∊
расплющить(
…)⍋s
Согласно этому «алфавиту», дайте индексы, которые бы сортировали строку ss[
...]
использование , что для изменения порядка систочник
⎕a
, потому что это регистр с учетом регистра. Намного лучше (для игры в гольф и вообще), за что я лоббирую; чтобы получить⌈
и⌊
сложить регистр на символьных данных, как в K. Тогда мы будем иметь⌊⎕A
вместо⎕a
.Python 2, 121 байт
источник
Clojure, 74 байта
Для каждого значения в первом списке получает соответствующее регулярное выражение и применяет его к входной строке. Результатом является список списков символов, которые соответствуют регулярному выражению. Затем отсортируйте каждый и объедините результат в один список и преобразуйте его в строку.
Вы можете увидеть это онлайн здесь: https://ideone.com/dqAkxg
источник
Сетчатка ,
4339 байтКоличество байтов предполагает кодировку ISO 8859-1. Конечный перевод строки значителен.
Ожидается, что входные данные будут иметь порядок сортировки в виде списка с нулями без разделителей в первой строке и строки, которая должна быть отсортирована во второй строке, например
Попробуйте онлайн!
объяснение
Я буду использовать приведенный выше пример ввода, чтобы провести вас по коду:
Этап 1: Замена
Само регулярное выражение просто
.
(соответствует любому символу, не являющемуся переводом строки), которое окружено!..."
. Однако2=
это предел, указывающий Retina применять замену только ко второму совпадению регулярного выражения. Итак, мы получаем это:Стадия 2: Транслитерация
Стадия транслитерации просто выполняет символьную замену.
¶
Представляет собой новую строку иd
расширяется до0123456789
(хотя мы можем игнорировать все цифры после2
). Это означает, что эта транслитерация соответствует следующему отображению:04
На фронте два ограничения, которые вместе указывают , что только первые четыре символа из этого множества должны быть транслитерации. Это и есть цифры в первой строке, а также перевод строки, разделяющий две строки, так что мы получаем это:В начале строки у нас есть три пары этих символов:
Обратите внимание, что вторые символы в парах находятся в обычном порядке ASCII (и всегда будут одинаковыми). Мы будем использовать их позже, чтобы отсортировать группы символов в главном вводе в требуемом порядке.
Первые символы немного интереснее: их значение заключается в том, что они
%
идут перед цифрами в таблице ASCII,@
идут перед прописными буквами (но после цифр) и^
перед строчными (но после заглавных букв). Это поможет нам сгруппировать маркеры положения (т.е. второй символ в каждой паре) с правильным набором символов.Этап 3: сортировка
Это простой этап сортировки. Он соответствует двум символам, если первый не является символом слова (таким образом, соответствует всем трем парам, о которых я только что говорил) или одному символу в противном случае (соответствует каждому символу основного ввода по отдельности), и сортирует эти строки. Это имеет две цели: он приводит символы в каждой группе в правильном порядке (и поскольку сортировка стабильна, этот порядок не будет испорчен на следующем этапе), и из-за
%@^
маркеров он вставляет пары в правильные позиции:Этап 4: сортировка
Эта стадия сортирует все совпадения
.\w+
регулярного выражения, которое из-за жадности соответствует одному маркеру позиции (то есть одному из!"#
) вместе со всеми символами слова после него. То есть сортирует эти три строки, порядок которых определяется исключительно символом маркера:"24! БОР #afo
Хотя это перетасовывает эти маркеры (оставляя остальные три маркера на месте), самое главное, они приводят цифры и буквы в правильном порядке:
Этап 5: Замена
Все, что осталось, это небольшая очистка, где мы удаляем все маркеры, сопоставляя их и заменяя их ничем.
источник
JavaScript (ES6), 65
Примечание: «естественный» порядок ASCII - 0-9, AZ, az, что является противоположностью OP 0,1,2. Так
источник
Haskell,
6263 байтаПример использования:
"cD12ab" # [2,0,1]
->"12abcD"
.Как это работает:
Редактировать: @Christian Sievers обнаружил ошибку. Благодарность! Исправлено за 1 дополнительный байт.
источник
Stax , 15 байт
Запустите и отладьте его онлайн
Это 15-байтовое представление упаковано в вариант набора символов CP437. Соответствующее представление ascii занимает 18 байтов:
Я уверен, что это может быть дополнительно обрезано, хотя.
VlVd+
Также может бытьVLA|(
, что слева вращается на0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
десять элементов. Также может быть весь кодVlVd+26/,e@:f,{[Io
, который читает входной стек дважды, а не читает их все в начале в основной стек, и использует другой (более традиционный) формат ввода, как показано в этом .источник
Дьялог АПЛ , 22 байта
(819⌶⎕A)
сложите прописные буквы в строчные(
...)⎕A⎕D[a]
Нижние верхние цифры переупорядочены в соответствии с массивом а∊
расплющитьs⍋⍨
для строки s получить индексы, которые бы сортировали s соответствии с этим «алфавитом»s[
...]
использование , что для изменения порядка систочник
PowerShell v2 +, 107 байт
Я изучаю алгоритмы с использованием регулярных выражений, но пока все они кажутся более длинными.
Принимает входные данные как явный массив
$n
(см. Примеры ниже) и строку,$s
которая немедленно приводится к массиву символов. Затем мы создаем три элемента нового динамического массива, каждый из которых заключен в-join
:-
(($s=$s|sort)|?{$_-ge97})
-
($s|?{$_-in65..96})
-
($s|?{$_-lt58})
Сначала мы берем
$s
и проходим через этоSort-Object
. К счастью, поскольку мы уже представили его как массив символов, сортировка чувствительна к регистру. Это повторно сохраняется в$s
и затем передается в aWhere-Object
с предложением больше чем97
(то есть, ASCII строчные буквыa-z
). Второй дляA-Z
и третий для0-9
.Таким образом, теперь у нас есть массив строк, где каждая строка состоит из одного из трех типов символов и сортируется. Нарезать это с,
[$n]
а затем-join
результатом, чтобы сформировать нашу окончательную выходную строку. Это остается на конвейере и печать неявная.Тестовые случаи
источник
Рубин, 56 байт
Портировано с @Dennis ответа.
Альтернативное 58-байтовое решение, которое мне нравится больше, вдохновлено @Neil и немного изменено из его ответа.
Попробуйте любую версию онлайн! (закомментированная версия является альтернативным решением)
источник
32-битный машинный код x86, 70 байт
В шестнадцатеричном виде:
Эта процедура ожидает, что порядок сортировки класса символов будет состоять из 3-символьной (0..2) строки
ESI
с нулевым символом в конце и строки для сортировкиEDI
. Сортировка выполняется на месте с использованием крайне неоптимальной (с точки зрения производительности) версии пузырьковой сортировки.источник
Emacs Lisp, 183 байта
Чуть короче, чем Java ...
источник
Clojure, 77 байт
Не такой короткий, как
re-seq
основанный, и я не мог понять, как это выразить "(apply str(mapcat sort(map(...))))
" в меньшем пространстве.group-by
создает хэш-карту, которую можно использовать в качестве функции, при запросе от 0 до 2 вводит соответствующую группу, упорядочивает три различных класса символов.Это было бы более компактно, чем
re-seq
решение, если бы было больше классов символов для обработки, так как для этого требуется только 5 дополнительных символов на группу57 1,
вместо 8 для выражения типа#"[a-z]"
.источник
Python 2,
14011710110099 байтВсе говорят: «Фу!». По крайней мере, это читабельно ... кашель не совсем кашель
Попробуйте онлайн
источник
R 101 байт
Создает вектор с az, AZ и 0-9 в заданном порядке и переупорядочивает символы входной строки, чтобы соответствовать этому порядку.
Попробуйте онлайн!
источник
J, 40 байт
источник
Ява 8,
221212193156 байтКонечно, я должен попытаться ответить и на свой собственный вызов. :) (и как обычно на Java.)
-28 байтов сохранено благодаря @cliffroot .
Объяснение:
Попробуй это здесь.
источник
[^a-z]
[^A-Z]
[^0-9]
и использоватьgetBytes()
вместоtoCharArray()
^
(не) было довольно глупо ..;)replaceAll
звонкиString c(int[]a,String z){String r[]={"[^a-z]","[^A-Z]","[^0-9]"},o="";for(byte c[],i=0;i<3;){c=z.replaceAll(r[a[i++]],"").getBytes();java.util.Arrays.sort(c);o+=new String(c);}return o;}