Diseño del teclado DVORAK


8

Aquí hay un desafío interesante ...

Quiero que utilices un código de golf que cuando se ejecute permitirá que tu entrada se convierta para imitar la salida como si estuvieras escribiendo en un diseño de teclado DVORAK.

El objetivo es imitar el teclado Dvorak simplificado de EE. UU. (EE. UU .: SDK)

ingrese la descripción de la imagen aquí

En comparación, aquí está el diseño QWERTY estándar de EE. UU .:

ingrese la descripción de la imagen aquí

La emulación del teclado debe funcionar tanto para mayúsculas como minúsculas, así como para las teclas desplazadas, por ejemplo, si qtoco la tecla (no desplazada) en mi teclado, el código Dvorak debería mostrar un 'carácter en la pantalla. Si ctuviera que tocar el botón (no desplazado) debería obtener un j(también no desplazado) en respuesta, C(desplazado) obtendría J(desplazado) y así sucesivamente ...

Por supuesto, solo me estoy concentrando en las teclas blancas del diagrama anterior. Las pestañas, las mayúsculas y las otras teclas grises deberían funcionar según lo normal ...

¿Alguna pregunta? ¿No por ahora? Bueno...

No permitiré recursos externos que ya tengan codificado el diseño, no traeré ningún archivo que pueda codificar el diseño. El código DEBE estar QWERTY INPUT -> (DVORAK RE-CODING) -> DVORAK OUTPUTen la naturaleza. No hay tontos Esolangs que sean teóricos o simplemente digan algo como "Este programa tomará la entrada QWERTY y la recodificará en DVORAK. Este es el programa". o una mierda así ... Tómate este desafío en serio ... Así que Brainfuck codificadores, te doy la bienvenida.

Tenga en cuenta que este NO es un programa de conversión de cadenas. Por cada tecla QWERTY que presione, se debe emitir el carácter DVORAK correspondiente ...

El código más corto gana ...


1
Creo que debe especificar un diseño QWERTY estándar si desea que esto sea un desafío justo. Sugiero usar este .
r3mainer

66
@ JanDvorak Estamos esperando su solución;)
VisioN

2
No lo entiendo completamente. Si la manipulación de cadenas está prohibida, ¿significa que stdin está fuera de discusión? ¿Entonces tengo que implementar un teclado de bajo nivel IO que lee las pulsaciones de teclas? Esto también descalifica a Brainfuck, que solo lee cadenas del stdin. ¿Qué pasa con stdout? ¿Puedo enviar cadenas al stdout o necesito codificar un controlador de teclado que simule presionar una tecla diferente?
fejesjoco

1
@fejesjoco ¿te refieres a la última oración? Leí eso como "STDIN debe leerse y escribirse en STDOUT sin almacenamiento en búfer"
John Dvorak

1
Además, sus preguntas parecen generar siempre una gran discusión en el hilo de comentarios. ¿Quizás es una señal de que deberías usar más el sandbox?
Tim Seguine

Respuestas:


7

Shell: Unix tr (1) , 94

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

Este comando toma QWERTY en stdin y genera DVORAK en stdout.


¡Maldita sea, me ganaste!
TheDoctor

@TheDoctor Acabo de encontrar esta pregunta lo suficientemente temprano ☻ me tomó un tiempo (¿unos 20 minutos?) Para optimizar, por ejemplo, los rangos.
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
Buena solución ;-)
mirabilos

4

C #, 360 caracteres

Probablemente no sea el más corto, pero hace exactamente lo que pides:

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);}}}

Si presiona una tecla en su teclado QWERTY, aparece el carácter DVORAK correcto en la consola.


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

Debería haber una respuesta en AHK para esta pregunta, pero no. Así que solo publica uno.


¿No debería haber un "retorno"?
MilkyWay90

@ MilkyWay90 OP no pidió detenerse. Y este programa continuará ejecutándose hasta que salga manualmente haciendo clic en el menú de la bandeja. Entonces, no hay "retorno" involucrado.
tsh

Oh bien, gracias por la explicación.
MilkyWay90

1

R , 157 bytes

Simple traducir script.

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

Pruébalo en línea!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.