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!
Respostas:
Geléia ,
97 bytesObrigado a @EriktheOutgolfer por uma sugestão que ajudou a economizar 2 bytes!
Experimente online!
Como funciona
fonte
Python 3 ,
7573 bytesIsso classifica a lista x no local.
Obrigado ao @mercator por jogar fora 2 bytes!
Experimente online!
Versão alternativa, 62 bytes
Isso recebe a entrada como cadeias de bytes, o que pode não ser permitido.
Experimente online!
fonte
x.sort(key=...)
.Haskell, 77 bytes
Muitas importações.
Experimente online!
fonte
Ruby , 61 bytes
Experimente online!
fonte
Limpo ,
10110094 bytes-6 bytes graças a Ourous!
Experimente online! Exemplo de utilização:
s ['3'] [['who'], ['what'], ['when']]
.Ungolfed:
fonte
? =toInt
e usar?
vez economiza 2 bytes e usar um valor maior que em vez de menor ou igual invertido salva outro.Na verdade , 24 bytes
Experimente online!
Explicação:
fonte
["who", "what", "when"]
e"thisisalongkey"
Perl 6 , 37 bytes
Experimente online!
$^a
e@^b
são os argumentos chave e matriz da função, respectivamente.@^b.sort(...)
simplesmente classifica a matriz de entrada de acordo com a função predicada que é fornecida. Essa função usa um único argumento, portantosort
, passa cada elemento por sua vez e trata o valor de retorno como uma chave para esse elemento, classificando a lista pelas chaves dos elementos.A função de classificação é
*.comb Z~^ (|$^a.comb xx *)
.*
é o argumento de cadeia única para a função*.comb
é uma lista dos caracteres individuais da sequência.|$^a.comb xx *
é uma lista dos caracteres na chave de classificação xor, replicada infinitamente. Essas duas listas são compactadas juntas (Z
) usando o operador string ou xor (~^
). Como o predicado de classificação retorna uma chave de classificação que é uma lista,sort
ordena dois elementos comparando os primeiros elementos das listas retornadas e, em seguida, os segundos elementos, se os primeiros elementos forem iguais, etc.fonte
{sort *.comb »~^»$^a.comb,@^b}
C (gcc) ,
132128126 bytesLeva uma contagem de argumentos e um ponteiro para uma matriz de strings (a chave, seguida pelas strings a serem classificadas) e modifica a matriz de strings no local.
O código é altamente não portátil e requer ponteiros de 64 bits, gcc e glibc.
Graças a @ceilingcat por jogar fora 2 bytes!
Experimente online!
fonte
Python 2,
204 140 134126 bytesGraças a @Mr. Xcoder por salvar 64 bytes, graças a @ovs por salvar seis bytes e obrigado a @Dennis por salvar oito bytes!
Experimente online!
fonte
x86 opcode, 57 bytes
Código do teste:
fonte
JavaScript ES 6,
1139795 bytesO JavaScript é longo na codificação ...
Para [0,65536) + 1e4, todos têm 5 dígitos, portanto, podem ser comparados como sequência de caracteres
fonte
k+=k
vez dep=k+p
muita memória usando com o pequeno caso de testePerl 5, 88 bytes
Experimente online .
fonte
Clojure, 80 bytes
fonte
Perl 5,
80 + 3 (, 67 bytesanl
) = 83experimente online
fonte
9
;abcdeabcde abcdeabcdz
(deve darabcdeabcdz abcdeabcde
)AWK ,
285284 bytesExperimente online!
Aceita entrada na forma de,
key word word ...
por exemplo912 abcde hello test honk
Produz palavras ordenadas, separadas por espaço
Um pouco mais legível
fonte
Fator, 85
Primeira tentativa, vou ver se posso jogar mais amanhã.
Eu aceito sugestões;)
fonte
Dyalog APL, 34 bytes
Dfn, usa ⎕ml 3
fonte