キーと文字列の配列が与えられたら、配列をシャッフルして、各要素がキーとXORされたときにソートされるようにします。
2つの文字列のXOR
キーで文字列を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"]
これはcode-golfなので、最小バイト数が勝ちです!