Digitando, mas à esquerda [fechado]


14

fundo

Você recebeu a tarefa de fazer anotações para uma reunião. Você começa a digitar no Google Doc, mas não tem tempo suficiente durante a reunião para olhar o teclado enquanto digita.

Felizmente para você, você pode digitar sem olhar para o teclado. Após a reunião, você percebe que tudo o que digitou foi uma chave à esquerda.

O desafio

Para esse desafio, você usará as letras, números e barra de espaço do layout do teclado QWERTY.

  • Dada a entrada de texto (de qualquer método de entrada padrão), imprima o texto resultante, onde cada caractere é movido um para a esquerda no teclado.

    • Para a maioria das letras, basta olhar para a letra e traduzi-la para a letra à esquerda ( ctorna-se x, ttorna-se r, etc.).

    • Para letra q, traduza para um caractere de tabulação literal ( \t).

    • Para letra a, ative caps lock, para que a capitalização do restante da string seja invertida.

    • Para letra z, coloque a próxima letra em maiúscula.

    • Nenhuma tradução é necessária para a barra de espaço.

  • Preserve a capitalização durante a tradução e lembre-se do caps lock (se o caps lock estiver ativado, verifique se o caso é o oposto).

  • Todos os caracteres na sequência de entrada serão letras, números ou um espaço. Nenhuma pontuação ou outros caracteres podem ser incluídos.

Casos de teste

\t é um caractere de tabulação literal

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

Pontuação

A menor pontuação em bytes vence. Diverta-se!


11
Uma referência rápida das linhas relevantes do teclado QWERTY seria útil, e manter a auto-contido desafio
Jo rei

4
Os números mudam para pontuação se houver um "Z" antes deles?
ErikF 9/10/19

10
Mas Z corresponde à mudança ...?
String não relacionada

4
Caso de teste sugerido: Azerty->wERT
Jitse 9/10/19

5
Para letra z, coloque em maiúscula a próxima letra na sequência -> isso significa que precisamos apenas nos preocupar com letras maiúsculas e não ter que alternar entre dígitos e símbolos? Qual é a saída esperada para 0123456789, a0123456789e z0z1z2z3z4z5z6z7z8z9? (Além disso, em muitos teclados não-QWERTY, 'Caps Lock' realmente funciona como um 'Shift Lock'. Acredito que o QWERTY não siga esse padrão, mas deve ser especificado para aqueles que não estão familiarizados com ele. )
Arnauld

Respostas:


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(/[?']/,"")

Experimente online! Meu primeiro código JavaScript de golfe. Definitivamente poderia ser mais curto, mas acho que este é um bom começo.
Ele basicamente encontra cada caractere na kstring e o substitui pelo anterior, depois troca o caso de tudo entre Aor ou aremove todas as ocorrências de Zor z(como a tecla shift não faz nada por si só).
Esse deve ser um layout de teclado QWERTY normal, mas me informe se não.


No seu próprio link TIO, zebras=>wveAo caso de teste parece estar errado. O primeiro zdeve fazer ecom que imprima uma letra maiúscula w. Do OP: "Para letra z, coloque a próxima letra em maiúscula na cadeia."
Night2 9/10/19

@ Night2 Cheers, postei antes do OP fazer o esclarecimento. Presumi que pressionar a tecla Shift uma vez não fará nada.
Matthew Jensen

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'

Experimente online!

Usa uma sequência de pesquisa na qual o caractere normal e sua versão modificada por turno são agrupados. Para cada caractere na entrada, ele recuperará o caractere dois lugares à esquerda. Altera a capitalização adicionando 1(ou -1se o caractere atual estiver em maiúsculas) ao valor da pesquisa quando o shift XOR caps lock estiver ativo. Os números não são influenciados pelo modificador caps lock.


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;

Experimente online!

Eu criei uma string de mapeamento ( ~1!2@3#4$5%6^7&8*9(0 qwertyuiopasdfghjklzxcvbnm) que para cada dígito tem o modo SHIFT à esquerda e para cada letra tem a letra / tecla à esquerda.

Eu faço um loop sobre os caracteres de entrada e para cada caractere:

  • Se o caractere for aou A, o sinalizador caps lock será revertido (não é lógico).
  • Se o caractere for zou Z, o sinalizador de deslocamento está definido como 1.
  • Quando o personagem não está em aAzZ:
    • O caractere à esquerda do caractere atual na sequência de mapeamento é armazenado $t.
    • Se o caractere atual for um espaço, ele será impresso.
    • Se o caractere atual for um dígito, e se o sinalizador shift for 1, $tfor impresso, caso contrário, se o dígito for 1, `será impresso, se o dígito for 0, 9será impresso e, caso contrário, digit-1será impresso.
    • Se o caractere atual for uma letra, com base no status do sinalizador de mudança, o sinalizador de maiúsculas e minúsculas do caractere atual (inferior / superior) $tserá impresso em letras minúsculas ou maiúsculas. O único caso especial aqui é o caractere de tabulação, que é impresso como está.
    • A marcação Shift é sempre definida 0no final.

2

Vermelho , 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]]]]]

Experimente online!

Atualmente AaZznão afetam dígitos.


Isso parece não funcionar'A pear' -> ' OWe'
Jitse 9/10

@Jitse Hmm
Galen Ivanov

@Jitse Mas realmente não funciona bem com dígitos, não está totalmente claro no OP
Galen Ivanov

2
Eu concordo, o desafio é muito ambíguo.
Jitse 9/10/19

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

Graças ao ceilingcat por -33 bytes.

Experimente online!


Sugerir em k^=!(l^7)vez dek=l^7?k:!k
ceilingcat 26/02
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.