Dada uma chave e uma matriz de cadeias, embaralhe a matriz para que seja classificada quando cada elemento for XOR com a chave.
XOR'ing duas cordas
Para XOR uma string por uma chave, XOR cada um dos valores de caracteres da string pelo seu par na chave, assumindo que a chave se repita para sempre. Por exemplo, abcde^123
parece com:
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
Ordenação
A classificação sempre deve ser feita lexicograficamente das seqüências do XOR. Ou seja, 1 < A < a < ~
(Assumindo a codificação ASCII)
Exemplo
"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"]
Notas
- A chave sempre terá pelo menos 1 caractere
- A chave e a entrada consistem apenas em ASCII imprimível.
- As seqüências XOR podem conter caracteres não imprimíveis.
- Entrada e Saída podem ser feitas através dos Métodos Razoáveis
- As brechas padrão são proibidas.
- Você pode pegar Key e Input em qualquer ordem.
Casos de teste
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"]
Isso é código-golfe , então o mínimo de bytes ganha!