Biorąc pod uwagę klucz i tablicę ciągów, przetasuj tablicę, aby została posortowana, gdy każdy element zostanie XOR'owany kluczem.
XOR'ing dwóch ciągów
Aby XOR napisać kluczem, XOR każdą z wartości znakowych napisu przez jego parę w kluczu, zakładając, że klucz będzie się powtarzał na zawsze. Na przykład abcde^123
wygląda następująco:
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
Sortowanie
Sortowania zawsze należy dokonywać leksykograficznie z ciągów XOR. To znaczy 1 < A < a < ~
(przy założeniu kodowania ASCII)
Przykład
"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"]
Notatki
- Klucz zawsze będzie miał co najmniej 1 znak
- Klucz i dane wejściowe będą składały się wyłącznie z drukowalnego kodu ASCII.
- Łańcuchy XOR'd mogą zawierać znaki niedrukowalne.
- Dane wejściowe i wyjściowe można realizować za pomocą rozsądnych metod
- Standardowe luki są zabronione.
- Możesz wziąć klucz i dane wejściowe w dowolnej kolejności.
Przypadki testowe
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"]
To jest golf golfowy , więc najmniej bajtów wygrywa!
Odpowiedzi:
Galaretka ,
97 bajtówDzięki @EriktheOutgolfer za sugestię, która pomogła zaoszczędzić 2 bajty!
Wypróbuj online!
Jak to działa
źródło
Python 3 ,
7573 bajtówTo sortuje listę x w miejscu.
Dzięki @mercator za grę w golfa z 2 bajtów!
Wypróbuj online!
Alternatywna wersja, 62 bajty
Pobiera to dane wejściowe jako ciągi bajtów, co może być niedozwolone.
Wypróbuj online!
źródło
x.sort(key=...)
.Haskell, 77 bajtów
Za dużo importu.
Wypróbuj online!
źródło
Rubin , 61 bajtów
Wypróbuj online!
źródło
Czysty ,
10110094 bajtów-6 bajtów dzięki Ourous!
Wypróbuj online! Przykładowe zastosowania:
s ['3'] [['who'], ['what'], ['when']]
.Nie golfowany:
źródło
? =toInt
a użycie?
zamiast tego oszczędza 2 bajty, a użycie odwróconego większego niż zamiast mniejszego lub równego oszczędza kolejny.Właściwie 24 bajty
Wypróbuj online!
Wyjaśnienie:
źródło
["who", "what", "when"]
and"thisisalongkey"
Perl 6 , 37 bajtów
Wypróbuj online!
$^a
i@^b
są odpowiednio kluczami i argumentami tablicowymi funkcji.@^b.sort(...)
po prostu sortuje tablicę wejściową według podanej funkcji predykatu. Ta funkcja pobiera jeden argument, więcsort
przekaże mu kolejno każdy element i potraktuje wartość zwracaną jako klucz dla tego elementu, sortując listę według kluczy elementów.Funkcja sortowania to
*.comb Z~^ (|$^a.comb xx *)
.*
jest argumentem pojedynczego ciągu funkcji.*.comb
jest listą pojedynczych znaków ciągu.|$^a.comb xx *
to lista znaków w kluczu sortowania Xor, replikowana w nieskończoność. Te dwie listy są spakowane razem (Z
) za pomocą ciągowego operatora xor (~^
). Ponieważ predykat sortowania zwraca klucz sortowania, którym jest lista,sort
porządkuje dwa elementy poprzez porównanie pierwszych elementów ze zwróconych list, a następnie drugich elementów, jeśli pierwsze elementy są takie same itd.źródło
{sort *.comb »~^»$^a.comb,@^b}
C (gcc) ,
132128126 bajtówPobiera liczbę argumentów i wskaźnik do tablicy ciągów (klucz, a następnie ciągi do posortowania) i modyfikuje tablicę ciągów w miejscu.
Kod jest wysoce nieprzenośny i wymaga 64-bitowych wskaźników, gcc i glibc.
Dzięki @ceilingcat za grę w golfa z 2 bajtów!
Wypróbuj online!
źródło
Python 2,
204 140 134126 bajtówDzięki @Mr. Xcoder za zapisanie 64 bajtów, dzięki @ovs za zapisanie sześciu bajtów i dzięki @Dennis za zapisanie ośmiu bajtów!
Wypróbuj online!
źródło
x86 opcode, 57 bajtów
Kod testowy:
źródło
JavaScript ES 6,
1139795 bajtówJavaScript długo zna kodowanie ...
Dla [0,65536) + 1e4 wszystkie mają 5 cyfr, dzięki czemu można je porównać jak ciąg
źródło
k+=k
zamiast,p=k+p
ale za dużo pamięci, używając małego przypadku testowegoPerl 5, 88 bajtów
Wypróbuj online .
źródło
Clojure, 80 bajtów
źródło
Perl 5,
80 + 3 (83,67 bajtówanl
) =spróbuj online
źródło
9
;abcdeabcde abcdeabcdz
(powinien daćabcdeabcdz abcdeabcde
)AWK ,
285284 bajtówWypróbuj online!
Akceptuje dane wejściowe w postaci
key word word ...
np912 abcde hello test honk
Wyświetla posortowane słowa oddzielone spacją
Nieco bardziej czytelny
źródło
Factor, 85
Po raz pierwszy zobaczę, czy jutro będę mógł zagrać w golfa.
Akceptuję sugestie;)
źródło
Dyalog APL, 34 bajty
Dfn, używa ⎕ml 3
źródło