Layout do teclado DVORAK


8

Aqui está um desafio interessante ...

Eu quero que você codifique o código do que, quando executado, permitirá que sua entrada seja convertida para simular a saída como se você estivesse digitando em um layout de teclado do DVORAK.

O objetivo é imitar o teclado Dvorak simplificado dos EUA (US: SDK)

insira a descrição da imagem aqui

Em comparação, aqui está o layout QWERTY padrão dos EUA:

insira a descrição da imagem aqui

A emulação do teclado deve funcionar com letras maiúsculas e minúsculas, bem como com as teclas qShift , por exemplo, se eu tocar na tecla (sem Shift) no teclado, o código Dvorak deve 'exibir um caractere na tela. Se eu toque no botão c(sem deslocamento), recebo uma jresposta C(também não deslocada) , (deslocada) receberá J(deslocada) e assim por diante ...

Estou concentrado apenas nas teclas brancas no diagrama acima. Abas, Caps e outras teclas cinza devem funcionar como normalmente ...

Alguma pergunta? Por enquanto não? Boa...

Não permitirei recursos externos que já tenham o layout codificado, não trarei nenhum arquivo que possa codificar o layout. O código DEVE estar QWERTY INPUT -> (DVORAK RE-CODING) -> DVORAK OUTPUTna natureza. Nenhum Esolang bobo que é teórico ou apenas diz algo como "Este programa pega a entrada QWERTY e a codifica no DVORAK. Esse é o programa". ou porcaria assim ... Leve esse desafio a sério ... Então, codificadores Brainfuck, eu lhe dou as boas-vindas.

Observe que este NÃO é um programa de conversão de strings. Para cada tecla QWERTY pressionada, o caractere DVORAK correspondente deve ser emitido ...

O menor código vence ...


1
Eu acho que você precisa especificar um layout QWERTY padrão, se você quiser que este seja um desafio justo. Eu sugiro usar este .
R3mainer 03/03

6
@JanDvorak Estamos aguardando a sua solução;)
VisioN 3/14

2
Eu não entendo completamente. Se a manipulação de strings é proibida, isso significa que stdin está fora de questão? Então eu tenho que implementar algum teclado de baixo nível que lê pressionamentos de tecla? Isso também desqualifica o cérebro, que lê apenas strings do stdin. E o stdout, posso enviar cadeias de caracteres para o stdout ou preciso codificar um tipo de driver de teclado que simule pressionar uma tecla diferente?
precisa saber é

1
@fejesjoco você está se referindo à última frase? Eu li que como "STDIN devem ser lidos e STDOUT escrito para sem buffer"
John Dvorak

1
Como um aparte, suas perguntas sempre geram uma grande discussão no tópico de comentários. Talvez seja um sinal de que você deveria usar mais a sandbox?
Tim Seguine

Respostas:


7

Shell: Unix tr (1) , 94

tr \''"+-/:-[]_b-{}' "-_}w[vzSsW]VZ@AXJE>UIDCHTNMBRL\"POYGK<QF:/={xje.uidchtnmbrl'poygk,qf;?+"

Este comando pega o QWERTY no stdin e gera o DVORAK no stdout.


Droga, você me venceu!
TheDoctor

@ TheDoctor Acabei de responder a essa pergunta com antecedência suficiente. Levei um tempo (cerca de 20 minutos?) Para otimizar, por exemplo, os intervalos.
mirabilos

8

C - 144 caracteres

main(c){putch((c=getch())>33?c:"_#$%&-()*}w[vz0123456789SsW]VZ@AXJE>UIDCHTNMBRL\"POYGK<QF:/\\
=^{`axje.uidchtnmbrl'poygk,qf?|+~"[c-34]);main(0);}

1
Solução agradável ;-)
mirabilos 03/03

4

C #, 360 caracteres

Provavelmente não é o mais curto, mas faz exatamente o que você pergunta:

using System;class A{static void Main(){string[] q={"-=qwertyuiop[]sdfghjkl;'zxcvbnm,./","_+QWERTYUIOP{}SDFGHJKL:\"ZXCVBNM<>?","[]',.pyfgcrl/=oeuidhtns-;qjkxbmwvz","{}\"<>PYFGCRL?+OEUIDHTNS_:QJKXBMWVZ"};while(true){var c=Console.ReadKey(true);var a=c.KeyChar;int i,w=c.Modifiers==ConsoleModifiers.Shift?1:0;Console.Write((i=q[w].IndexOf(a))>-1?q[w+2][i]:a);}}}

Se você pressionar uma tecla do teclado QWERTY, o caractere DVORAK correto aparecerá no console.


3

AutoHotKey, 200 bytes

-::[
=::]
q::'
w::,
e::.
r::p
t::y
y::f
u::g
i::c
o::r
p::l
[::/
]::=
s::o
d::e
f::u
g::i
h::d
j::h
k::t
l::n
`;::s
'::-
z::`;
x::q
c::j
v::k
b::x
n::b
,::w
.::v
/::z

Deve haver uma resposta no AHK para esta pergunta, mas não. Então, basta postar um.


Não deveria haver um "retorno"?
precisa

@ MilkyWay90 OP não pediu para parar. E esse programa continuará sendo executado até você sair manualmente clicando no menu da bandeja. Portanto, nenhum "retorno" envolvido.
tsh

Oh ok, obrigado pela explicação.
precisa

1

R , 157 bytes

Script de tradução simples.

chartr('\'qQwWeErRtTyYuUiIoOpP[{]}sSdDfFgGhHjJkKlL;:"zZxXcCvVbBnN,<.>/?=_+-','-\'",<.>pPyYfFgGcCrRlL/?=+oOeEuUiIdDhHtTnNsS_;:qQjJkKxXbBwWvVzZ{]}[',scan(,''))

Experimente online!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.