O layout do teclado que as pessoas costumam usar é o layout QWERTY , como mostrado abaixo.
Mas também existem outros layouts de teclado:
DVORAK
COLEMAK
Sua tarefa
Seu código terá duas entradas: o nome do layout do teclado e uma string para transcrever. Seu objetivo é converter sua entrada QWERTY como se você estivesse digitando com o layout do teclado fornecido como primeiro parâmetro.
Regras
O formato de entrada é gratuito, você pode usar seqüências de caracteres, matrizes etc. Além disso, você pode usar três valores distintos para representar os layouts para reduzir sua contagem de bytes, mas cada um deles deve ser representável em 10 bytes ou menos.
Você só precisa manipular as teclas com fundo branco. Especificamente, você deve transpor os caracteres ASCII imprimíveis do alfabeto QWERTY para um dos outros alfabetos:
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{|}~
(Observação: isso foi transcrito à mão por @ETHproductions; portanto, se você encontrar algum erro, aponte-o!)
Exemplo
DVORAK zZxX
como entrada dará como saída ;:qQ
Isso é código-golfe, então a resposta mais curta em bytes vence!
!_#$%&-()*}w[vz0123456789SsW]VZ@AXJE>UIDCHTNMBRL"POYGK<QF:/\=^{`axje.uidchtnmbrl'poygk,qf;?|+~
como entrada do teclado Dvorak? Isso banalizaria o desafio ... Que tal introduzir uma restrição de comprimento ou algo semelhante?!_#$%&-()*}w[vz0123456789SsW]VZ@AXJE>UIDCHTNMBRL"POYGK<QF:/\=^{`axje.uidchtnmbrl'poygk,qf;?|+~
como entradaRespostas:
Rubi ,
258247238 bytesExperimente online!
Esta é uma função que aceita dois argumentos: a mensagem a ser trocada e um valor 0-2 representando o layout a ser trocado, onde 0 corresponde a Dvorak, 1 a Colemak e 2 a Workman.
Fundamentalmente, não acho que isso seja muito diferente das outras respostas. Mais facilmente, fica assim:
A
string#tr
função Ruby usa dois argumentos: uma string contendo caracteres a serem substituídos e uma string contendo suas substituições. Ajuda, permite especificar intervalos de caracteres usando aa-z
sintaxe. A outra realização importante de economia de espaço é que não é necessário incluir caracteres iguais nos quatro layouts, o que me permitiu livrar-me de todos os dígitos, a letra "A" em maiúsculas e minúsculas e algumas caracteres especiais.Um outro pedaço estranho de sintaxe é o uso de
%W()
. Isso cria uma matriz de cadeias contendo tudo dentro dos parênteses, separados por espaços em branco. Todas as quebras de linha no envio realmente funcionam como separadores de elementos.%W()
também permite interpolação de strings (o que é feito com o#{}
operador) -%w()
teria sido a mesma coisa, mas sem interpolação de strings.Eu também gostaria de ter um momento para culpar Dvorak por mexer com meus planos de otimização por insistir em ser totalmente diferente de todos os outros, o tempo todo; uma solução Qwerty / Colemak / Workman poderia ter sido tão lindamente curta ...
fonte
JavaScript (ES7),
282273251250 bytesLeva um ID de layout do teclado
k
e uma matriz de caracteresa
na sintaxe de curry(k)(a)
. Retorna uma matriz de caracteres traduzidos.Os IDs de layout são:
Experimente online!
Como funciona
Compressão
Todos os três layouts de destino são armazenados em uma única sequência compactada, em que cada caractere é:
Por exemplo,
#$%&-()*
no DVORAK é armazenado como3-2
porque#$%&
e()*
possui mapeamentos idênticos no QWERTY e-
é apenas uma tradução real.Em particular,
0123456789
é mapeado da mesma maneira em todos os layouts e nunca precisa ser traduzido. Portanto, não há ambiguidade possível entre um dígito usado para compactação e um dígito usado para tradução.Descompressão
3-2
3375-225
Tradução
Para cada personagem
c
, ema
, extraímos o caráter de traduçãot
, usandok
como uma compensação na cadeia de layout não-comprimido, e testar se é um dígito com1/t
. Nesse caso, produzimos o caractere originalc
.fonte
Retina ,
273270 bytesExperimente online! Prefixar a mensagem com uma única letra
D
,C
ouW
para o layout de teclado desejado. Infelizmente, Retina suporta um monte de letras mágicas (p
sendo a óbvia, mas eu consegui inserir umad
) que todas precisam ser citadas, exceto que eu era capaz de usar emv-x
vez dev\wx
. Editar: salvou 3 bytes graças a @ETHproductions.fonte
-
s representam intervalos de caracteres, acho que você pode salvar alguns alterando<-@ABC
para<-C
.PHP, 364 bytes
Matriz contém 3 matrizes em que chave representa 0 = W, 1 = C, 2 = D
Experimente online!
fonte
Python 2, 422 bytes
Tentou combinar layouts com uma maneira inteligente, mas não ajudou muito.
Experimente online
fonte
JavaScript (ES6),
461409404395385 bytesEu escrevi a versão original do texto abaixo no meu telefone enquanto estava sentado em um ônibus e, em seguida, fiquei sem tempo para jogar corretamente, para que houvesse mais problemas a seguir. Obrigado a @ETHproductions pela ajuda até agora.
As seqüências de teclado foram copiadas diretamente da pergunta, então culpe
AntoineETH por qualquer erro!Isso leva um número inteiro representando o layout do teclado (0 para DVORAK, 94 para COLEMAK & 188 para WORKMAN) e uma matriz da string como argumentos ao currying - por exemplo,
f(0)(["z","Z","x","X"])
saídas;:qQ
.Tente
fonte
QWERTY
como entrada, então eu acho que você poderia salvar alguns bytes não armazenando o objeto em uma variável. Seria algo parecido coms=>[...s].map(c=>({D:"...",C:"...",W:"..."}[k[0]]["...".indexOf(c)]).join``
map()
mas fiquei sem tempo - acredite ou não, escrevi isso enquanto estava sentado no ônibus para o cinema. Vou atualizá-lo com sua sugestão e algumas melhorias que me vi amanhã.05AB1E ,
199192187 bytesUsa IDs
1
para DVORAK;2
para COLEMAK e3
WORKMAN.Empurra o ID primeiro e depois a string que queremos transliterar.
Experimente online ou verifique a gama ASCII completa para todos os três .
Explicação:
Consulte esta dica 05AB1E (seção Como compactar cadeias de caracteres que não fazem parte do dicionário? ) Para entender como as cadeias compactadas funcionam.
fonte
C ++, 528 bytes
Execute com
./multitrans <0-2> <string>
onde 0 = Dvorak, 1 = Colemak e 2 = Operário.Eu adicionei novas linhas no meio para tornar o código um pouco mais legível abaixo. Esse código gera um mapa de conversão a partir das seqüências de caracteres onde procurar o caractere Qwerty retorna a tradução (
t[0]['s'] = 'o'
por s para Dvorak) e, em seguida, usa o mapa para traduzir. As cadeias de tradução são reduzidas porque alguns caracteres não precisam ser alterados. Provavelmente poderia ser reduzido ainda mais.Extra: Qwerty -> Somente Dvorak (197 bytes)
Recentemente, escrevi esse código que transforma Qwerty em Dvorak, embora as capitais não sejam traduzidas.
fonte
C, 394 bytes
Experimente on-line
fonte