Dada una clave y una serie de cadenas, baraje la matriz para que se ordene cuando cada elemento se XOR con la clave.
XOR'ing dos cuerdas
Para XOR una cadena por una clave, XOR cada uno de los valores de caracteres de la cadena por su par en la clave, suponiendo que la clave se repita para siempre. Por ejemplo, se abcde^123
ve así:
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
Clasificación
La clasificación siempre debe hacerse lexicográficamente de las cadenas XOR'd. Es decir, 1 < A < a < ~
(suponiendo la codificación ASCII)
Ejemplo
"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
- La clave siempre tendrá al menos 1 carácter.
- La clave y la entrada solo consistirán en ASCII imprimible.
- Las cadenas XOR'd pueden contener caracteres no imprimibles.
- La entrada y salida se puede hacer a través de los métodos razonables
- Las lagunas estándar están prohibidas.
- Puede tomar Clave y Entrada en cualquier orden.
Casos de prueba
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"]
Este es el código de golf , ¡por lo que gana menos bytes!
Respuestas:
Jalea ,
97 bytes¡Gracias a @EriktheOutgolfer por una sugerencia que ayudó a ahorrar 2 bytes!
Pruébalo en línea!
Cómo funciona
fuente
Python 3 ,
7573 bytesEsto ordena la lista x en el lugar.
¡Gracias a @mercator por jugar 2 bytes!
Pruébalo en línea!
Versión alternativa, 62 bytes.
Esto toma la entrada como cadenas de bytes, que pueden no estar permitidas.
Pruébalo en línea!
fuente
x.sort(key=...)
.Haskell, 77 bytes
Demasiadas importaciones.
Pruébalo en línea!
fuente
Ruby , 61 bytes
Pruébalo en línea!
fuente
Limpio ,
10110094 bytes-6 bytes gracias a Ourous!
Pruébalo en línea! Ejemplo de uso:
s ['3'] [['who'], ['what'], ['when']]
.Sin golf:
fuente
? =toInt
y usar en su?
lugar ahorra 2 bytes, y usar un volteado mayor que en lugar de menor o igual guarda otro.En realidad , 24 bytes
Pruébalo en línea!
Explicación:
fuente
["who", "what", "when"]
y"thisisalongkey"
Perl 6 , 37 bytes
Pruébalo en línea!
$^a
y@^b
son los argumentos clave y de matriz para la función, respectivamente.@^b.sort(...)
simplemente ordena la matriz de entrada de acuerdo con la función de predicado que se le asigna. Esa función toma un solo argumento, entoncessort
lo que pasará cada elemento por turno y tratará el valor de retorno como una clave para ese elemento, ordenando la lista por las claves de los elementos.La función de clasificación es
*.comb Z~^ (|$^a.comb xx *)
.*
es el argumento de cadena única para la función.*.comb
es una lista de los caracteres individuales de la cadena.|$^a.comb xx *
es una lista de los caracteres en la clave de clasificación xor, replicada infinitamente. Esas dos listas se comprimen juntas (Z
) usando el operador xor en cadena (~^
). Dado que el predicado de clasificación devuelve una clave de clasificación que es una lista,sort
ordena dos elementos comparando los primeros elementos de las listas devueltas, luego los segundos elementos si los primeros elementos son iguales, etc.fuente
{sort *.comb »~^»$^a.comb,@^b}
C (gcc) ,
132128126 bytesToma un recuento de argumentos y un puntero a una matriz de cadenas (la clave, seguida de las cadenas que se ordenarán) y modifica la matriz de cadenas en su lugar.
El código es altamente no portátil y requiere punteros de 64 bits, gcc y glibc.
¡Gracias a @ceilingcat por jugar 2 bytes!
Pruébalo en línea!
fuente
Python 2,
204 140 134126 bytesGracias a @Mr. Xcoder por guardar 64 bytes, gracias a @ovs por guardar seis bytes, y gracias a @Dennis por guardar ocho bytes.
Pruébalo en línea!
fuente
código de operación x86, 57 bytes
Código de prueba:
fuente
JavaScript ES 6,
1139795 BytesJavaScript es largo en charcoding ...
Para [0,65536) + 1e4, todos tienen 5 dígitos, por lo que se pueden comparar como una cadena
fuente
k+=k
lugar de usarp=k+p
demasiada memoria con el caso de prueba pequeñoPerl 5, 88 bytes
Pruébalo en línea .
fuente
Clojure, 80 bytes
fuente
Perl 5,
80 + 3 (, 67 bytesanl
) = 83pruébalo en línea
fuente
9
;abcdeabcde abcdeabcdz
(debería darabcdeabcdz abcdeabcde
)AWK ,
285284 bytesPruébalo en línea!
Acepta entradas en forma de,
key word word ...
p. Ej.912 abcde hello test honk
Salidas palabras ordenadas separadas por espacios
Ligeramente más legible
fuente
Factor, 85
Primero intente, veré si puedo jugar más golf mañana.
Acepto sugerencias;)
fuente
Dyalog APL, 34 bytes
Dfn, usa ⎕ml 3
fuente