Escribiendo, pero a la izquierda [cerrado]

14

Antecedentes

Se le ha asignado la tarea de tomar notas para una reunión. Empiezas a escribir en tu Google Doc, pero no tienes suficiente tiempo durante la reunión para mirar tu teclado mientras escribes.

Afortunadamente para ti, puedes escribir sin mirar tu teclado. Después de la reunión, te das cuenta de que todo lo que escribiste fue una tecla a la izquierda.

El reto

Para este desafío, utilizará las letras, los números y la barra espaciadora del diseño del teclado QWERTY.

  • Dada una entrada de texto (desde cualquier método de entrada estándar), genera el texto resultante, donde cada carácter se mueve uno a la izquierda en el teclado.

    • Para la mayoría de las letras, solo mire la letra y traduzca a la letra a la izquierda (se cconvierte x, se tconvierte r, etc.).

    • Para la letra q, traduzca a un carácter de tabulación literal ( \t).

    • Para la letra a, habilite el bloqueo de mayúsculas, de modo que se invierta la capitalización del resto de la cadena.

    • Para la letra z, escribe en mayúscula la siguiente letra de la cadena.

    • No se requiere traducción para la barra espaciadora.

  • Preserve las mayúsculas durante la traducción y tenga en cuenta el bloqueo de mayúsculas (si el bloqueo de mayúsculas está habilitado, asegúrese de que el caso sea el opuesto).

  • Todos los caracteres en la cadena de entrada serán letras, números o un espacio. No se pueden incluir signos de puntuación u otros caracteres.

Casos de prueba

\t es un carácter de tabulación literal

Hello world    -> Gwkki qieks
Code Golf      -> Xisw Fikd
Queried apples -> \tyweuws OOKWA

Puntuación

La puntuación más baja en bytes gana. ¡Que te diviertas!

conecta tu cargador
fuente
11
Una referencia rápida de las filas relevantes del teclado QWERTY sería útil y mantendría el desafío autónomo
Jo King,
44
¿Los números se desplazan a la puntuación si había una "Z" antes de ellos?
ErikF
10
Pero Z corresponde al cambio ...?
Cadena no relacionada
44
Caso de prueba sugerido: Azerty->wERT
Jitse
55
Para la letra z, escriba en mayúscula la siguiente letra de la cadena -> ¿eso significa que solo tenemos que preocuparnos por la mayúscula y no tener que alternar entre dígitos y símbolos? ¿Cuál es la salida esperada para 0123456789, a0123456789y z0z1z2z3z4z5z6z7z8z9? (Además, en muchos teclados que no son QWERTY, 'Caps Lock' realmente actúa como 'Shift Lock'. Creo que QWERTY no sigue este patrón, pero debería especificarse para aquellos de nosotros que no estamos familiarizados con él. )
Arnauld

Respuestas:

11

JavaScript (V8) , 271 bytes

f=(s,k='~!@#$%^&*()_+`1234567890-=\tQWERTYUIOP{}|\tqwertyuiop[]\\ASDFGHJKL:"\n\\asdfghjkl;\'ZXCVBNM<>?zxcvbnm,./')=>s.replace(/[^ ]/g,c=>k[k.indexOf(c)-1]).replace(/\\([^\\]*)\\?/g,(m,c)=>c.replace(/[a-zA-z]/g,l=>l>'Z'?l.toUpperCase():l.toLowerCase())).replace(/[?']/,"")

Pruébalo en línea! Mi primer código JavaScript de golf. Definitivamente podría ser más corto, pero creo que este es un buen comienzo.
Básicamente, encuentra cada carácter en la kcadena y lo reemplaza con el anterior, luego intercambia el caso de todo entre el Ao a, y elimina todas las ocurrencias de Zo z(ya que la tecla shift no hace nada por sí sola).
Este debería ser un diseño de teclado QWERTY normal, pero avíseme si no.

Matthew Jensen
fuente
En su propio enlace TIO, el zebras=>wveAcaso de prueba parece estar equivocado. El primero zdebería hacer eque se imprima una mayúscula w. De OP: "Para la letra z, escribe con mayúscula la siguiente letra de la cadena".
Noche2
@ Night2 Cheers, publiqué antes de que OP hiciera la aclaración. Asumí que presionar la tecla Mayús una vez no hará nada.
Matthew Jensen el
5

Python 3 , 211 bytes

d=' ~!@#$%^&*()`~1!2@3#4$5%6^7&8*9(0)		qQwWeErRtTyYuUiIoOpPaAsSdDfFgGhHjJkKlLzZxXcCvVbBnNmM  '
c=s=0
for i in input():k=d.find(i);print(end=d[k-2+(c*i.isalpha()^s)*(1-k%2*2)][i in'aAzZ':]);c^=i in'aA';s=i in'zZ'

Pruébalo en línea!

Utiliza una cadena de búsqueda en la que el carácter normal y su versión modificada por desplazamiento se agrupan. Para cada carácter en la entrada, volverá a recibir el personaje dos lugares a la izquierda. Cambia las mayúsculas agregando 1(o -1si el carácter actual está en mayúsculas) al valor de búsqueda cuando el bloqueo de mayúsculas XOR está activo. Los números no están influenciados por el modificador de bloqueo de mayúsculas.

Jitse
fuente
2

PHP , 227 bytes

for(;''<$s=$argn[$i++];)$s!=a&&$s!=A?$s!=z&&$s!=Z?($t=$m[stripos($m='~1!2@3#4$5%6^7&8*9(0	qwertyuiopasdfghjklzxcvbnm',$s)-1])+(print$s>' '?$s<A?!$h?$s-1?$s?$s-1:9:'`':$t:($t>=A&&(($s<a)+$h+$c)%2?$t^' ':$t):$s)+$h=0:$h=1:$c=!$c;

Pruébalo en línea!

He creado una cadena de mapeo ( ~1!2@3#4$5%6^7&8*9(0 qwertyuiopasdfghjklzxcvbnm) que para cada dígito tiene su modo SHIFT a la izquierda y para cada letra tiene la letra / tecla a su izquierda.

Doy vueltas sobre los caracteres de entrada y para cada carácter:

  • Si el carácter es ao A, el indicador de bloqueo de mayúsculas se invierte (lógico, no).
  • Si el carácter es zo Z, el indicador de cambio se establece en 1.
  • Cuando el personaje no está en aAzZ:
    • El carácter a la izquierda del carácter actual en la cadena de mapeo se almacena en $t.
    • Si el carácter actual es un espacio, se imprime.
    • Si el carácter actual es un dígito, y si la bandera de desplazamiento es 1, $tse imprime, de lo contrario, si el dígito es 1, `se imprime, si el dígito es 0, 9se imprime y de lo contrario, digit-1se imprime.
    • Si el carácter actual es una letra, $tse imprime en mayúsculas o minúsculas , en función del estado de la bandera de cambio, la bandera de bloqueo de mayúsculas y la carcasa del carácter actual (inferior / superior) . El único caso especial aquí es el carácter de tabulación, que se imprime tal cual.
    • La bandera de cambio siempre se vuelve a 0poner al final.
Noche2
fuente
2

Rojo , 218 bytes

func[t][c: z: 0 rejoin collect[foreach s t[case[find"Aa"s[c: c xor 32]find"Zz"s[z: 32]on
[keep(select/case"  poiuytrewq^-lkjhgfdsamnbvcxzPOIUYTREWQ^-LKJHGFDSAMNBVCXZ0987654321~"s)xor either s <#"Z"[0][c xor z]z: 0]]]]]

Pruébalo en línea!

Actualmente AaZzno afecta a los dígitos.

Galen Ivanov
fuente
Esto no parece funcionar para'A pear' -> ' OWe'
Jitse
@Jitse Hmm
Galen Ivanov
@Jitse Pero realmente no funciona bien con los dígitos, no está del todo claro desde el OP
Galen Ivanov
2
Estoy de acuerdo, el desafío es muy ambiguo como es.
Jitse
2

C (gcc) , 276 bytes

i;j;k;h;l;m;n;o;f(char*b){char*c=calloc(m=strlen(b),1),*a=" \tqwertyuiop\aasdfghjkl\nzxcvbnm\tQWERTYUIOP\aASDFGHJKL\nZXCVBNM`1234567890";for(i=k=j=n=0;j<=m;l=a[i=index(a,b[j++])-a-1])k=l^7?k:!k,o=l>64&l<91?a[i-30*k]:l<97?h=i?l^7?l?l^10?l:0:32:0:0:a[i+29*k],o?c[n++]=o:n;b=c;}

Gracias a ceilingcat por -33 bytes.

Pruébalo en línea!

girobuz
fuente
Sugerir en k^=!(l^7)lugar dek=l^7?k:!k
ceilingcat