Получив ключ и массив строк, перетасуйте массив так, чтобы он сортировался, когда каждый элемент XOR соответствует ключу.
XOR'ing две строки
Чтобы XOR строки ключом, XOR каждого из символьных значений строки его парой в ключе, предполагая, что ключ повторяется навсегда. Например, abcde^123
выглядит так:
a b c d e
1 2 3 1 2
--------------------------------------------
01100001 01100010 01100011 01100100 01100101
00110001 00110010 00110011 00110001 00110010
--------------------------------------------
01010000 01010000 01010000 01010101 01010111
--------------------------------------------
P P P U W
Сортировка
Сортировка всегда должна выполняться лексикографически по строкам XOR. То есть 1 < A < a < ~
(при условии кодирования ASCII)
пример
"912", ["abcde", "hello", "test", "honk"]
-- XOR'd
["XSQ]T", "QT^U^", "MTAM", "Q^\R"]
-- Sorted
["MTAM", "QT^U^", "Q^\R", "XSQ]T"]
-- Converted back
["test", "hello", "honk", "abcde"]
Примечания
- Ключ всегда будет не менее 1 символа
- Ключ и ввод будут состоять только из печатного ASCII.
- Строки XOR могут содержать непечатаемые символы.
- Ввод и вывод могут быть выполнены с помощью разумных методов
- Стандартные лазейки запрещены.
- Вы можете взять ключ и ввод в любом порядке.
Тестовые случаи
key, input -> output
--------------------
"912", ["abcde", "hello", "test", "honk"] -> ["test", "hello", "honk", "abcde"]
"taco", ["this", "is", "a", "taco", "test"] -> ["taco", "test", "this", "a", "is"]
"thisisalongkey", ["who", "what", "when"] -> ["who", "what", "when"]
"3", ["who", "what", "when"] -> ["what", "when", "who"]
Это код-гольф , поэтому выигрывает минимум байтов!
Ответы:
Желе ,
97 байтСпасибо @EriktheOutgolfer за предложение, которое помогло сэкономить 2 байта!
Попробуйте онлайн!
Как это устроено
источник
Python 3 ,
7573 байтаЭто сортирует список х на месте.
Спасибо @mercator за удаление 2 байта!
Попробуйте онлайн!
Альтернативная версия, 62 байта
Это принимает входные данные в виде байтовых строк, что может быть запрещено.
Попробуйте онлайн!
источник
x.sort(key=...)
.Haskell, 77 байт
Слишком много импорта.
Попробуйте онлайн!
источник
Рубин , 61 байт
Попробуйте онлайн!
источник
Чисто ,
10110094 байта-6 байт благодаря Ourous!
Попробуйте онлайн! Пример использования:
s ['3'] [['who'], ['what'], ['when']]
.Ungolfed:
источник
? =toInt
использование?
вместо этого сохраняет 2 байта, а использование перевернутого «больше» вместо «меньше или равно» сохраняет другой.На самом деле , 24 байта
Попробуйте онлайн!
Объяснение:
источник
["who", "what", "when"]
и"thisisalongkey"
Perl 6 , 37 байт
Попробуйте онлайн!
$^a
и@^b
являются аргументами ключа и массива функции соответственно.@^b.sort(...)
просто сортирует входной массив в соответствии с заданной им функцией предиката. Эта функция принимает один аргумент, поэтомуsort
будет передавать его каждому элементу по очереди и обрабатывать возвращаемое значение как ключ для этого элемента, сортируя список по ключам элементов.Функция сортировки есть
*.comb Z~^ (|$^a.comb xx *)
.*
это единственный строковый аргумент функции.*.comb
это список отдельных символов строки.|$^a.comb xx *
список символов в ключе сортировки xor, тиражируемый бесконечно Эти два списка объединяются (Z
) с помощью строкового оператора xor (~^
). Поскольку предикат сортировки возвращает ключ сортировки, который является списком,sort
упорядочивает два элемента путем сравнения первых элементов возвращенных списков, а затем вторых элементов, если первые элементы совпадают, и так далее.источник
{sort *.comb »~^»$^a.comb,@^b}
C (gcc) ,
132128126 байтовПринимает количество аргументов и указатель на массив строк (ключ, за которым следуют отсортированные строки) и изменяет массив строк на месте.
Код очень непереносим и требует 64-битных указателей, gcc и glibc.
Спасибо @ceilingcat за 2 байта в гольфе!
Попробуйте онлайн!
источник
Python 2
204 140 134126 байтБлагодаря @Mr. Xcoder за сохранение 64 байтов, спасибо @ovs за сохранение шести байтов и спасибо @Dennis за сохранение восьми байтов!
Попробуйте онлайн!
источник
код операции x86, 57 байт
Тестовый код:
источник
JavaScript ES 6,
1139795 байтJavaScript долго кодирует ...
Для [0,65536) + 1e4 все будут 5 цифрами, поэтому их можно сравнивать как строку
источник
k+=k
вместоp=k+p
слишком большого количества памяти, используя небольшой тестовый примерPerl 5, 88 байт
Попробуйте онлайн .
источник
Clojure, 80 байт
источник
Perl 5,
80 + 3 (, 67 байтanl
) = 83попробуйте это онлайн
источник
9
;abcdeabcde abcdeabcdz
(должен датьabcdeabcdz abcdeabcde
)AWK ,
285284 байтаПопробуйте онлайн!
Принимает ввод в виде
key word word ...
например,912 abcde hello test honk
Выходы отсортированные слова разделены пробелом
Чуть более читабельно
источник
Фактор, 85
Сначала попробуй, я посмотрю, смогу ли я сыграть в гольф завтра.
Я принимаю предложения;)
источник
Дьялог АПЛ, 34 байта
Dfn, использует 3ml 3
источник