Раскладка клавиатуры, которую обычно используют люди, это раскладка QWERTY, как показано ниже.
Но есть и другие раскладки клавиатуры:
DVORAK
Colemak
Твое задание
Ваш код будет принимать два ввода: имя раскладки клавиатуры и строку для расшифровки. Ваша цель - преобразовать ввод QWERTY, как если бы вы печатали с раскладкой клавиатуры, заданной в качестве первого параметра.
правила
Формат ввода свободен, вы можете использовать строки, массивы и т. Д. Кроме того, вы можете использовать любые три различных значения для представления макетов, чтобы уменьшить количество байтов, но каждое из них должно быть представлено в 10 байтах или меньше.
Вам нужно только обрабатывать клавиши с белым фоном. В частности, вы должны транспонировать печатные символы ASCII из алфавита QWERTY в один из других алфавитов:
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{|}~
(Примечание: это было записано вручную @ETHproductions, поэтому, если вы видите какие-либо ошибки, пожалуйста, укажите на них!)
пример
DVORAK zZxX
как вход будет давать как выход ;:qQ
Это код-гольф, поэтому выигрывает самый короткий ответ в байтах!
!_#$%&-()*}w[vz0123456789SsW]VZ@AXJE>UIDCHTNMBRL"POYGK<QF:/\=^{`axje.uidchtnmbrl'poygk,qf;?|+~
в качестве входа для клавиатуры Дворжака? Это упрощает задачу ... Как насчет введения ограничения длины или чего-то подобного?!_#$%&-()*}w[vz0123456789SsW]VZ@AXJE>UIDCHTNMBRL"POYGK<QF:/\=^{`axje.uidchtnmbrl'poygk,qf;?|+~
качестве входных данныхОтветы:
Рубин ,
258247238 байтПопробуйте онлайн!
Это функция, принимающая два аргумента: сообщение, подлежащее обмену, и значение 0-2, представляющее макет, к которому нужно обменяться, где 0 соответствует Дворжаку, 1 - Коулмаку и 2 - Уокману.
По сути, я не думаю, что это сильно отличается от других ответов. Более наглядно это выглядит так:
string#tr
Функция Руби принимает два аргумента: строку, содержащую символы для замены, и строку, содержащую их замены. Полезно, это позволяет вам указать диапазоны символов, используяa-z
синтаксиса. Другая ключевая реализация экономии места заключается в том, что нет необходимости включать символы, которые являются одинаковыми во всех четырех макетах, что позволило мне избавиться от всех цифр, буква «А» в верхнем и нижнем регистре, а также несколько специальные символы.Еще один странный бит синтаксиса - это использование
%W()
. Это создает массив строк, содержащих все внутри скобок, разделенных пробелами. Все переносы строк в представлении фактически функционируют как разделители элементов.%W()
также разрешает интерполяцию строк (что делается с помощью#{}
оператора) -%w()
было бы то же самое, но без интерполяции строк.Я также хотел бы воспользоваться моментом, чтобы обвинить Дворжака в том, что он порвал с моими планами по оптимизации, поскольку настаивал на том, чтобы все время быть совершенно другими, чем все остальные; решение Qwerty / Colemak / Workman могло бы быть очень коротким ...
источник
JavaScript (ES7),
282273251250 байтПринимает идентификатор раскладки клавиатуры
k
и массив символовa
в синтаксисе карри(k)(a)
. Возвращает массив переведенных символов.Идентификаторы макета:
Попробуйте онлайн!
Как это устроено
компрессия
Все три целевых макета хранятся в одной сжатой строке, где каждый символ:
Например,
#$%&-()*
в DVORAK хранится как3-2
потому что#$%&
и()*
имеют одинаковые отображения в QWERTY и только-
является фактическим переводом.В частности,
0123456789
отображается одинаково на всех макетах и никогда не должен переводиться. Следовательно, нет никакой двусмысленности между цифрой, используемой для сжатия, и цифрой, используемой для перевода.декомпрессия
3-2
3375-225
.Перевод
Для каждого символа
c
вa
мы извлекаем символ переводаt
, используяk
в качестве смещения в несжатой строке макета, и проверяем, является ли это цифрой с1/t
. Если это так, мы выводим оригинальный символc
вместо этого.источник
Сетчатка ,
273270 байтПопробуйте онлайн! Префикс сообщения с одной буквой
D
,C
илиW
для желаемой раскладки клавиатуры. К сожалению, Retina поддерживает кучу волшебных букв (p
что очевидно, но мне все-таки удалось проскользнутьd
), которые нужно процитировать, за исключением того, что я смог использоватьv-x
вместоv\wx
. Редактировать: 3 байта сохранены благодаря @ETHproductions.источник
-
s представляют диапазоны символов, я думаю, вы можете сохранить некоторые из них, изменив<-@ABC
на<-C
.PHP, 364 байта
Массив содержит 3 массива, где ключ обозначает 0 = W, 1 = C, 2 = D
Попробуйте онлайн!
источник
Python 2, 422 байта
Пытался объединить макеты каким-то умным способом, но это не сильно помогло.
Попробуйте онлайн
источник
JavaScript (ES6),
461409404395385 байтЯ написал оригинальную версию ниже на своем телефоне, когда сидел в автобусе, а затем не хватило времени, чтобы правильно поиграть в гольф, чтобы было больше хруста. Спасибо @ETHproductions за помощь до сих пор.
Строки клавиатуры были скопированы непосредственно из вопроса, поэтому вините
АнтуанаETH в любых ошибках!Для этого требуется целое число, представляющее раскладку клавиатуры (0 для DVORAK, 94 для COLEMAK и 188 для WORKMAN) и массив строк в качестве аргументов при каррировании - например,
f(0)(["z","Z","x","X"])
выходных данных;:qQ
.Попытайся
источник
QWERTY
качестве входных данных, поэтому я думаю, что вы могли бы сохранить несколько байтов, не сохраняя Object в переменной. Это будет выглядеть примерно такs=>[...s].map(c=>({D:"...",C:"...",W:"..."}[k[0]]["...".indexOf(c)]).join``
map()
но у меня не хватило времени - хотите верьте, хотите нет, я написал это, сидя в автобусе в кино. Я обновлю его твоим предложением и несколькими улучшениями, которые я заметил сам завтра.05AB1E ,
199192187 байтИспользует идентификаторы
1
для DVORAK;2
для COLEMAK и3
для WORKMAN.Сначала нажмите ID, затем строку, которую мы хотим транслитерировать.
Попробуйте онлайн или проверьте полный ASCII-диапазон для всех трех .
Объяснение:
Посмотрите этот совет 05AB1E (раздел Как сжимать строки, не входящий в словарь? ), Чтобы понять, как работают сжатые строки.
источник
C ++, 528 байт
Бежать с
./multitrans <0-2> <string>
где 0 = Дворжак, 1 = Колемак и 2 = Рабочий.Я добавил новые строки между ними, чтобы сделать код немного более читабельным ниже. Этот код генерирует карту перевода из строк, где поиск символа Qwerty возвращает перевод (
t[0]['s'] = 'o'
для s в Dvorak), а затем использует карту для перевода. Строки перевода сокращены, потому что некоторые символы не нужно менять никогда. Хотя, возможно, его можно было бы уменьшить и дальше.Дополнительно: Qwerty -> Только Дворак (197 байт)
Я недавно написал этот код, который превращает Qwerty в Dvorak, хотя заглавные буквы не переведены.
источник
C 394 байта
Попробуйте онлайн
источник