Układ klawiatury, z którego często korzystają ludzie, to układ QWERTY, jak pokazano poniżej.
Ale są też inne układy klawiatury:
DVORAK
COLEMAK
Twoje zadanie
Twój kod wymaga dwóch danych wejściowych: nazwy układu klawiatury i ciągu do transkrypcji. Twoim celem jest konwersja danych wejściowych QWERTY tak, jakbyś pisał z układem klawiatury podanym jako pierwszy parametr.
Zasady
Format wejściowy jest bezpłatny, możesz używać ciągów, tablic itp. Ponadto możesz użyć dowolnych trzech różnych wartości do przedstawienia układów w celu zmniejszenia liczby bajtów, ale każda z nich musi być reprezentowalna w 10 bajtach lub mniej.
Musisz tylko obsługiwać klucze z białym tłem. W szczególności należy transponować drukowane znaki ASCII z alfabetu QWERTY na jeden z pozostałych alfabetów:
QWERTY: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
DVORAK: !_#$%&-()*}w[vz0123456789SsW]VZ@AXJE>UIDCHTNMBRL"POYGK<QF:/\=^{`axje.uidchtnmbrl'poygk,qf;?|+~
COLEMAK: !"#$%&'()*+,-./0123456789Oo<=>?@ABCSFTDHUNEIMKY:QPRGLVWXJZ[\]^_`abcsftdhuneimky;qprglvwxjz{|}~
WORKMAN: !"#$%&'()*+,-./0123456789Ii<=>?@AVMHRTGYUNEOLKP:QWSBFCDXJZ[\]^_`avmhrtgyuneolkp;qwsbfcdxjz{|}~
(Uwaga: zostało to ręcznie przepisane przez @ETHproductions, więc jeśli zobaczysz jakieś błędy, proszę je wskazać!)
Przykład
DVORAK zZxX
jako wejście da jako wynik ;:qQ
To jest golf golfowy, więc wygrywa najkrótsza odpowiedź w bajtach!
!_#$%&-()*}w[vz0123456789SsW]VZ@AXJE>UIDCHTNMBRL"POYGK<QF:/\=^{`axje.uidchtnmbrl'poygk,qf;?|+~
Jako dane wejściowe dla klawiatury Dvorak? To by trywializowało wyzwanie ... Co powiesz na wprowadzenie ograniczenia długości lub czegoś podobnego?!_#$%&-()*}w[vz0123456789SsW]VZ@AXJE>UIDCHTNMBRL"POYGK<QF:/\=^{`axje.uidchtnmbrl'poygk,qf;?|+~
Jako dane wejścioweOdpowiedzi:
Rubin ,
258247238 bajtówWypróbuj online!
Jest to funkcja przyjmująca dwa argumenty: wiadomość do zamiany i wartość 0-2 reprezentującą układ, który ma zostać zamieniony, gdzie 0 odpowiada Dvorak, 1 do Colemak i 2 do Workman.
Zasadniczo nie sądzę, aby różniło się to od innych odpowiedzi. Bardziej czytelnie wygląda to tak:
string#tr
Funkcja Ruby przyjmuje dwa argumenty: ciąg zawierający znaki do zastąpienia i ciąg zawierający ich zamienniki. Pomocnie pozwala określić zakresy znaków za pomocąa-z
składni. Inną kluczową realizacją oszczędzającą miejsce jest to, że nie jest konieczne dołączanie znaków, które są takie same we wszystkich czterech układach, co pozwoliło mi pozbyć się wszystkich cyfr, litery „A”, zarówno wielkiej, jak i małej, oraz garści znaki specjalne.Kolejną dziwną częścią składni jest użycie
%W()
. Tworzy to tablicę ciągów zawierających wszystko w nawiasach, oddzielonych białymi znakami. Wszystkie podziały wierszy w przesyłaniu faktycznie działają jako separatory elementów.%W()
zezwala również na interpolację ciągów (co odbywa się za pomocą#{}
operatora) -%w()
byłoby to samo, ale bez interpolacji łańcuchów.Chciałbym również poświęcić chwilę na obwinianie Dvoraka za to, że bałaganił moje plany optymalizacji, ponieważ nalegał, aby być całkowicie innym niż wszyscy przez cały czas; rozwiązanie Qwerty / Colemak / Workman mogło być tak pięknie krótkie ...
źródło
JavaScript (ES7),
282273251250 bajtówPobiera identyfikator układu klawiatury
k
i tablicę znakówa
w składni curry(k)(a)
. Zwraca tablicę przetłumaczonych znaków.Identyfikatory układu to:
Wypróbuj online!
Jak to działa
Kompresja
Wszystkie trzy docelowe układy są przechowywane w jednym skompresowanym ciągu, gdzie każdy znak to:
Na przykład
#$%&-()*
w DVORAK jest przechowywany jako3-2
ponieważ#$%&
i()*
ma identyczne odwzorowania w QWERTY i tylko-
jest rzeczywistym tłumaczeniem.W szczególności,
0123456789
jest odwzorowany w ten sam sposób na wszystkich układach i nigdy nie musi być tłumaczony. Dlatego nie ma możliwej niejednoznaczności między cyfrą używaną do kompresji a cyfrą używaną do tłumaczenia.Dekompresja
3-2
3375-225
.Tłumaczenie
Dla każdego znaku
c
wa
, możemy wyodrębnić charakter tłumaczeniat
, używająck
jako przesunięcie w nieskompresowanej ciąg układu i sprawdzić, czy jest to cyfra z1/t
. Jeśli tak, wyprowadzamy oryginalny znakc
.źródło
Siatkówka ,
273270 bajtówWypróbuj online! Prefiks wiadomość z jednej litery
D
,C
lubW
do pożądanego układu klawiatury. Niestety Retina obsługuje kilka magicznych liter (cop
jest oczywiste, ale udało mi się wślizgnąć w ad
), z których wszystkie trzeba zacytować, z wyjątkiem tego, że mogłem użyćv-x
zamiast nichv\wx
. Edycja: Zapisano 3 bajty dzięki @ETHproductions.źródło
-
s reprezentują zakresy znaków, myślę, że możesz zaoszczędzić, zmieniając<-@ABC
na<-C
.PHP, 364 bajtów
Tablica zawiera 3 tablice, w których klucz oznacza 0 = W, 1 = C, 2 = D
Wypróbuj online!
źródło
Python 2, 422 bajty
Próbowałem połączyć układy w jakiś sprytny sposób, ale to niewiele pomogło.
Wypróbuj online
źródło
JavaScript (ES6),
461409404395385 bajtówOryginalną wersję poniżej napisałem na telefonie, gdy siedziałem w autobusie, a potem zabrakło mi czasu, aby odpowiednio zagrać w golfa, aby było więcej do zrobienia. Dzięki @ETHproductions za pomoc do tej pory.
Ciągi klawiatury zostały skopiowane bezpośrednio z pytania, więc obwiniaj
AntoineETH za wszelkie błędy!Pobiera to liczbę całkowitą reprezentującą układ klawiatury (0 dla DVORAK, 94 dla COLEMAK i 188 dla WORKMAN) i tablicę ciągu jako argumenty przez curry - np .
f(0)(["z","Z","x","X"])
Wyjścia;:qQ
.Spróbuj
źródło
QWERTY
jako danych wejściowych, więc myślę, że możesz zaoszczędzić trochę bajtów, nie przechowując obiektu w zmiennej. To by wyglądałos=>[...s].map(c=>({D:"...",C:"...",W:"..."}[k[0]]["...".indexOf(c)]).join``
map()
ale skończyło mi się czas - uwierz lub nie, napisałem to siedząc w autobusie do kina. Zaktualizuję to z twoją sugestią i kilkoma ulepszeniami, które zauważyłem jutro.05AB1E ,
199192187 bajtówUżywa identyfikatorów
1
dla DVORAK;2
dla COLEMAK i3
WORKMAN.Najpierw wypycha identyfikator, a następnie ciąg, który chcemy transliterować.
Wypróbuj online lub sprawdź pełny zakres ASCII dla wszystkich trzech .
Wyjaśnienie:
Zapoznaj się z moją wskazówką 05AB1E (sekcja Jak kompresować ciągi, które nie są częścią słownika? ), Aby zrozumieć, jak działają skompresowane ciągi.
źródło
C ++, 528 bajtów
Biegnij z
./multitrans <0-2> <string>
gdzie 0 = Dvorak, 1 = Colemak, a 2 = Robotnik.Dodałem nowe wiersze pomiędzy, aby kod był nieco bardziej czytelny poniżej. Ten kod generuje mapę translacji z ciągów, w których wyszukiwanie znaku Qwerty zwraca tłumaczenie (
t[0]['s'] = 'o'
dla s do Dvorak), a następnie używa mapy do tłumaczenia. Ciągi tłumaczenia są skracane, ponieważ niektóre znaki nie muszą być nigdy zmieniane. Prawdopodobnie można to jednak jeszcze bardziej zmniejszyć.Dodatkowo: Qwerty -> Tylko Dvorak (197 bajtów)
Niedawno napisałem ten kod, który zmienia Qwerty w Dvorak, choć wielkie litery nie są przetłumaczone.
źródło
C, 394 bajty
Wypróbuj online
źródło