Arregla mis dedos gordos


21

Code Golf Challenge

Tengo un problema, mis dedos están gordos y con frecuencia tengo un problema al escribir una tecla a la derecha en mi kryboard.

Me temo que el tiempo se está poniendo peor y peor con el paso del tiempo.

Sopn cada pulsación de tecla que hago wil; ¡muévase hacia la derecha!

Antes de eso, me gustaría un programa (o función) para cambiar automáticamente cada pulsación de tecla a la izquierda.

Me aseguraré de llevar mi tomo typong al resto de tjis chal; enge para no causar ninguna confusión.


Objetivo:

Escriba un programa o función que tome una entrada de una de las siguientes teclas verdes en un teclado QWERTY estándar y devuelva el carácter de la tecla a la izquierda del mismo.ingrese la descripción de la imagen aquí


Condiciones:

• Puede suponer que la persona que ejecuta este programa está usando un teclado QWERTY como el que se muestra arriba.

• La entrada y la salida no distinguen entre mayúsculas y minúsculas, puede usar cualquier caso (o una combinación de combinaciones de mayúsculas y minúsculas) para este desafío y también puede suponer que todas las entradas serán en un solo caso si lo desea.

• Si su idioma no tiene forma de permitir que un usuario ingrese la tecla de retorno por alguna razón, puede ignorar esa tecla para esto.

• Este desafío es solo para los valores predeterminados de las teclas, por ejemplo, si 4se presiona la tecla, puede asumir que siempre será 4y nunca$

• Puede suponer que solo se presionarán las teclas verdes.


Ejemplo Input-> Output:

S-> a
4-> 3
=-> -
[->p


Este es el , por lo que gana el programa con el bytecount más corto.


¿Podrías proporcionar casos de prueba?
Kritixi Lithos

1
@KritixiLithos ¡Ciertamente! Editaré tjat ahora @
Albert Renshaw

¿Querías decir ]-> [?
shooqie


3
Puede que no te importe, pero aquí hay una interesante curiosidad: esta es una distribución de teclado ANSI. Tenga en cuenta la barra invertida sobre la tecla Intro; en contraste con un teclado ISO, en el que el botón de barra invertida está a la izquierda de Z. (¡También es estadounidense, pero es más fácil de identificar!)
Doddy

Respuestas:


7

Ruby, 76 71 69 bytes

->a{"`1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm,./"[/.#{a}/][0]}

5

Perl 6 , 87 83 69 bytes

{[Q"`1234567890-=qwertyuiop[]\asdfghjkl;'
zxcvbnm,./".comb].&{%(.[1..*]Z=>$_)}{$_}}

{~Q"`1234567890-=qwertyuiop[]\asdfghjkl;'
zxcvbnm,./".match(/.)>$_/)}

Pruébalo en línea!

Me pregunto si hay una manera de codificar esa cadena codificada en algo más corto ...

(Robó la idea de expresiones regulares de GB para -14 bytes).


1
Quizás si tuviéramos $"los rangos podríamos ahorrar algunos caracteres
Ven

5

Jalea , 34 33 bytes

ØD”`1¦ṭØqż“[]\“;'¶“,./“0-=”Fṡ2UZy

Pruébalo en línea!

Cómo funciona

ØD”`1¦ṭØqż“[]\“;'¶“,./“0-=”Fṡ2UZy  Main link. Argument: s (string)

ØD                                 Digits; yield "0123456789".
  ”`1|                             Replace '0' with a backtick.
       Øq                          Qwerty; yield
                                   ["qwertyuiop", "asdfghjkl", "zxcvbnm"].
      ṭ                            Tack; add "`123456789" as the last element of
                                   the qwerty array.
          “[]\“;'¶“,./“0-=”        Yield ["[]\\", ";'\n", "0-="].
         ż                         Zip; combine the strings of the array to the
                                   left with the corresponding strings of the array
                                   to the right, yielding an array of string pairs.
                           F       Flatten, yielding a string.
                            ṡ2     Obtain all overlapping pairs of characters.
                              U    Upend; reverse each pair.
                               Z   Zip, yielding a pair of strings.
                                y  Translate the input s according to the generated
                                   replacement table.

3
No sé Jelly, ¿puedes agregar una explicación de tu código? Tengo curiosidad por saber cómo te escapaste sin escribir una secuencia literal de todo el teclado
Albert Renshaw

1
Todavía no tenía tiempo, pero agregaré una explicación lo antes posible.
Dennis

1
Hecho. También lo jugué un poco.
Dennis

1
Øq¡hábil! Me gusta esto, gracias!
Albert Renshaw

4

Python 3, 85 78 bytes:

lambda x,k="`1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm<>?":k[k.‌​find(x)-1]

1
Puede pasar la cadena como parámetro opcional, usando 1 lambda: lambda x,k="1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm<>?":k[k.find(x)-1]para reducir algunos bytes
Rod

Buen punto, lo agregaré.
L3viathan

Creo que necesitas un retroceso para estar a la izquierda de 1.
xnor

@xnor Correcto, lo arreglé.
L3viathan

4

Python , 76 bytes

s="1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm<>?"
dict(zip(s,'`'+s)).get

Pruébalo en línea!

Crea un diccionario que lleva cada tecla a la izquierda al comprimir la cadena de caracteres con su versión desplazada. La conclusión es la función, la superior es una definición.

El uso translatepara crear un mapeo dio una solución más larga. Pruébalo en línea!

lambda s:s.translate("';"*22+"_0__9`12345678_LM-<>_\\VXSWDFGUHJKNBIO=EARYCQZT\nP][___"*4)

4

Retina , 53 51 bytes

T`1-90\-=QW\ERTYUI\OP[]\\ASDF-HJ-L;'¶ZXCVBNM,./`\`o

Pruébalo en línea!

Una transliteración simple que desplaza cada personaje 1 posición hacia atrás. Todo desde 1hasta /es el conjunto de caracteres original, mientras que la siguiente parte es el nuevo conjunto, que se utiliza opara indicar el otro conjunto.

Hy Lson clases de caracteres especiales para la transliteración en la retina (mapeo respectivamente a dígitos hexadecimales y letras mayúsculas), pero afortunadamente ocurren en el teclado dentro de secuencias ordenadas alfabéticamente ( FGHy JKL), por lo que podemos evitar escapar colocándolos en rangos y ganar así 2 bytes


3

C ++, 109 bytes

void f(char i){std::string k="`1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm,./";std::cout<<k[k.find(i)-1];}

Pruébalo en línea!


3

TI-Basic, 70 bytes

Dudo que pueda ser más corto que esto ...

Input Str1
"`1234567890-=QWERTYUIOP[]\ASDFGHJKL;'ZXCVBNM,./
sub(Ans,inString(Ans,Str1)-1,1

PS Las fichas son de dos bytes Str1, `, \, sub(, y inString(.


3

V , 57 54 51 bytes

3 bytes guardados gracias a @ nmjcman101 por usar hxVp lugar de lo que tenía para el teclado multilínea

i`¬190-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./<esc>/<C-r>a
hxVp

Pruébalo en línea!

<esc> es 0x1b y <c-r>es0x12

Nota: esto no es compatible con la tecla Intro

Contiene no imprimibles, así que aquí está el hexdump

00000000: 6960 ac31 3930 2d3d 7177 6572 7479 7569  i`.190-=qwertyui
00000010: 6f70 5b5d 5c61 7364 6667 686a 6b6c 3b27  op[]\asdfghjkl;'
00000020: 7a78 6376 626e 6d2c 2e2f 1b2f 1261 0a68  zxcvbnm,././.a.h
00000030: 7856 70                                  xVp

Explicación

La mayor parte del programa genera el teclado. iingresa al modo de inserción y cada carácter que lo sigue se imprime en el búfer. Pero hay una pequeña peculiaridad aquí,¬19 inserta caracteres entre 1 y 9.

El programa sale del modo de inserción en <esc>. Y luego aquí /<c-r>abusca el argumento en el búfer. Esto coloca el cursor sobre el personaje que encontró.

h                  " move the cursor to the left
 x                 " delete this character
  Vp               " select this line and replace it with the deleted character

No estoy al 100%, pero creo que en lugar de hylHVGpti puedes hacer lo que @DJMcMayhem hizo en la pregunta de la motocicleta hxVp. No estoy seguro de por qué pones Gallí, ¿no es todo una línea? También dhVpfuncionaría.
nmjcman101

@ nmjcman101 Ah sí, debo haber mantenido el Gdesde cuando el teclado solía ser multilínea. ¡Gracias!
Kritixi Lithos

2

PowerShell, 82 bytes

$k="1234567890-=qwertyuiop[]\asdfghjkl;'
zxcvbnm,./";$k[$k.IndexOf((read-host))-1]

La tecla Enter es compatible, pero no se puede probar Read-Hostporque el acto de presionar enter sin valor no devuelve nada en PowerShell.


2

Japt , 56 42 bytes

;D=Dv ·q i"[]\\",A i";'",22 +",./")Dg1nDbU

Explicación

;D=Dv ·q i"[]\\",A i";'",22 +",./")Dg1nDbU

;D=D                                        // Shortcut for QWERTY (with newlines and spaces), assigning to variable D
    v                                       // Setting D to lowercase
      ·q                                    // Joining D into an array with no spaces or newlines
        i"[]\\",A                          // Inserting "[]\" into index 10 (A)
                   i";'",22                 // Inserting ";'" into index 22
                           +",./"           // Appending ",./"
                                  Dg        // Returns the character at index:
                                    1n      //    -1+
                                       DbU  //     Index of U (the input)

Pruébalo en línea!


Este es genial, ¿puedes agregar una explicación?
Albert Renshaw

1
@AlbertRenshaw Se agregó una explicación.
Oliver

2

Java 8, 99 bytes

c->{String r="`1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm,./";return r.charAt(r.indexOf(c)-1);}

Explicación:

Pruébalo aquí

c->{                // Method with character as both parameter and return-type
  String r="`1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm,./";
                    //  Literal String of the qwerty keyboard layout of the challenge
  return r.charAt(  //  Return the character at the following index:
    r.indexOf(c)    //   The index of the input character
    -1);            //   -1 to shift it to the left
}                   // End of method

1
Me doy por vencido. Yo estaba tratando de hacerlo con expresiones regulares, pero desgraciadamente fallar con algunos caracteres especiales ... c->"`1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm,./".replaceAll("(?s).*(.)"+c+".*","$1").
Olivier Grégoire

2

JavaScript (ES6), 74 bytes

c=>(s=".,mnbvcxz\n';lkjhgfdsa\\][poiuytrewq=-0987654321`")[s.indexOf(c)+1]

Como /no está en mi cadena, indexOfdevuelve -1, que cuando se incrementa hace .que se genere la salida. 93 bytes para procesar una cadena:

s=>s.replace(/./g,c=>s[s.indexOf(c)+1],s="><mnbvcxz\n';lkjhgfdsa\\][poiuytrewq=-0987654321`")

@KevinCruijssen Gracias por descubrir que accidentalmente cambié esas tres teclas. Los he cambiado ahora.
Neil

1

GNU sed , 72 + 1 (r flag) = 73 bytes

s:$:`1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm,./:
s:(.).*(.)\1.*:\2:

La clave de retorno no se puede probar, porque sed por diseño divide la entrada usando \ncomo delimitador y luego ejecuta el script tantas veces como haya líneas.

Prueba de funcionamiento: par continuo de entrada-salida (cuando haya terminado, presione Ctrl + D o Ctrl + C)

me@LCARS:/PPCG$ sed -rf shift_key.sed
s
a
4
3
=
-
a
\
1
`
\
]

1

05AB1E , 50 bytes

'`žhÀ"-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm,./"JDÀ‡

Pruébalo en línea!

Explicación:

'`                                                  # 1 char string: `
  žh                                                # Push numbers 0123456789
    À                                               # Rotated 1 left (123456890)
     "-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm,./"      # Push string literal
                                              J     # Join all elements pushed to the stack to one string
                                               D    # Duplicate
                                                À   # Rotate 1 left
                                                 ‡  # Transliterate: a.get(b.indexOf(input))

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.