El diseño del teclado que la gente usa comúnmente es el diseño QWERTY como se muestra a continuación.
Pero también hay otros diseños de teclado:
DVORAK
COLEMAK
Tu tarea
Su código tomará dos entradas: el nombre de la distribución del teclado y una cadena para transcribir. Su objetivo es convertir su entrada QWERTY como si estuviera escribiendo con la distribución del teclado dada como primer parámetro.
Reglas
El formato de entrada es gratuito, puede usar cadenas, matrices, etc. Además, puede usar tres valores distintos para representar los diseños para reducir su conteo de bytes, pero cada uno debe ser representable en 10 bytes o menos.
Solo necesita manejar las teclas con un fondo blanco. Específicamente, debe transponer los caracteres ASCII imprimibles del alfabeto QWERTY a uno de los otros 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{|}~
(Nota: esto fue transcrito a mano por @ETHproductions, así que si ve algún error, ¡indíquelo!)
Ejemplo
DVORAK zZxX
como entrada dará como salida ;:qQ
Este es el código de golf, por lo que gana la respuesta más corta en bytes.
!_#$%&-()*}w[vz0123456789SsW]VZ@AXJE>UIDCHTNMBRL"POYGK<QF:/\=^{`axje.uidchtnmbrl'poygk,qf;?|+~
como entrada para el teclado Dvorak? Eso trivializaría el desafío ... ¿Qué tal si introducimos una restricción de longitud o algo similar?!_#$%&-()*}w[vz0123456789SsW]VZ@AXJE>UIDCHTNMBRL"POYGK<QF:/\=^{`axje.uidchtnmbrl'poygk,qf;?|+~
como entradaRespuestas:
Rubí ,
258247238 bytesPruébalo en línea!
Esta es una función que toma dos argumentos: el mensaje que se intercambiará y un valor 0-2 que representa el diseño al que se intercambiará, donde 0 corresponde a Dvorak, 1 a Colemak y 2 a Workman.
Fundamentalmente, no creo que esto sea muy diferente a las otras respuestas. Más legible, se ve así:
La
string#tr
función de Ruby toma dos argumentos: una cadena que contiene caracteres para ser reemplazados y una cadena que contiene sus reemplazos. A modo de ayuda, le permite especificar rangos de caracteres mediante laa-z
sintaxis. La otra realización clave para ahorrar espacio es que no es necesario incluir caracteres que sean iguales en los cuatro diseños, lo que me permitió deshacerme de todos los dígitos, la letra "A" en mayúsculas y minúsculas, y un puñado de caracteres especiales.Otro poco extraño de sintaxis es el uso de
%W()
. Esto crea una serie de cadenas que contienen todo dentro de los paréntesis, separados por espacios en blanco. Todos los saltos de línea en el envío realmente funcionan como separadores de elementos.%W()
también permite la interpolación de cadenas (que se realiza con el#{}
operador):%w()
hubiera sido lo mismo, pero sin la interpolación de cadenas.También me gustaría tomar un momento para culpar a Dvorak por jugar con mis planes de optimización a través de su insistencia en ser totalmente diferente a los demás, todo el tiempo; una solución Qwerty / Colemak / Workman podría haber sido tan bellamente corta ...
fuente
JavaScript (ES7),
282273251250 bytesToma una ID de diseño de teclado
k
y una matriz de caracteresa
en sintaxis curry(k)(a)
. Devuelve una matriz de caracteres traducidos.Los ID de diseño son:
Pruébalo en línea!
Cómo funciona
Compresión
Los tres diseños de destino se almacenan en una sola cadena comprimida, donde cada carácter es:
Por ejemplo,
#$%&-()*
en DVORAK se almacena como3-2
causa#$%&
y()*
tienen asignaciones idénticas en QWERTY y sólo-
es una traducción real.En particular,
0123456789
se asigna de la misma manera en todos los diseños y nunca tiene que traducirse. Por lo tanto, no existe una posible ambigüedad entre un dígito utilizado para la compresión y un dígito utilizado para la traducción.Descompresión
3-2
3375-225
Traducción
Para cada carácter
c
ena
, extraemos el carácter traducciónt
, usandok
como un desplazamiento en la cadena de diseño sin comprimir, y la prueba si se trata de un dígito con1/t
. Si es así, sacamos el carácter original en suc
lugar.fuente
Retina ,
273270 bytesPruébalo en línea! Prefije el mensaje con una sola letra
D
,C
oW
para la distribución de teclado deseada. Desafortunadamente, Retina admite un montón de letras mágicas (p
siendo la obvia, pero logré meterme en unad
) que todas necesitan ser citadas, excepto que pude usarlas env-x
lugar dev\wx
. Editar: Guardado 3 bytes gracias a @ETHproductions.fuente
-
s representan rangos de caracteres, creo que podría guardar algunos cambiando<-@ABC
a<-C
.PHP, 364 bytes
La matriz contiene 3 matrices donde la clave representa 0 = W, 1 = C, 2 = D
Pruébalo en línea!
fuente
Python 2, 422 bytes
Intenté combinar diseños con alguna forma inteligente, pero no ayudó mucho.
Pruébalo en línea
fuente
JavaScript (ES6),
461409404395385 bytesEscribí la versión original de la siguiente en mi teléfono mientras estaba sentado en un autobús y luego se me acabó el tiempo para jugarlo correctamente para que haya más crujidos a seguir. Gracias a @ETHproductions por la ayuda hasta ahora.
Las cadenas del teclado se copiaron directamente de la pregunta, ¡así que culpe a
AntoineETH por cualquier error!Esto toma un número entero que representa la distribución del teclado (0 para DVORAK, 94 para COLEMAK y 188 para WORKMAN) y una matriz de la cadena como argumentos mediante currículum, por ejemplo,
f(0)(["z","Z","x","X"])
salidas;:qQ
.Intentalo
fuente
QWERTY
como entrada, por lo que creo que podría guardar algunos bytes al no almacenar el Objeto en una variable. Se vería algo asís=>[...s].map(c=>({D:"...",C:"...",W:"..."}[k[0]]["...".indexOf(c)]).join``
map()
pero se me acabó el tiempo; créanlo o no, escribí esto mientras estaba sentado en el autobús al cine. Lo actualizaré con su sugerencia y algunas mejoras que me he visto mañana.05AB1E ,
199192187 bytesUtiliza identificadores
1
para DVORAK;2
para COLEMAK y3
para WORKMAN.Primero empuja la ID, luego la cadena que queremos transliterar.
Pruébelo en línea o verifique el rango ASCII completo para los tres .
Explicación:
Vea esta sugerencia mía 05AB1E (sección ¿Cómo comprimir cadenas que no forman parte del diccionario? ) Para comprender cómo funcionan las cadenas comprimidas.
fuente
C ++, 528 bytes
Corre con
./multitrans <0-2> <string>
donde 0 = Dvorak, 1 = Colemak y 2 = Workman.Agregué nuevas líneas en el medio para hacer que el código sea un poco más legible a continuación. Este código genera un mapa de traducción a partir de las cadenas donde al buscar el carácter Qwerty devuelve la traducción (
t[0]['s'] = 'o'
por s en Dvorak), y luego usa el mapa para traducir. Las cadenas de traducción se acortan porque algunos caracteres no necesitan cambiarse nunca. Sin embargo, probablemente podría reducirse aún más.Extra: Qwerty -> Solo Dvorak (197 bytes)
Recientemente escribí este código que cambia Qwerty a Dvorak, aunque las mayúsculas no se traducen.
fuente
C, 394 bytes
Probar en línea
fuente