Taper, mais vers la gauche [fermé]

14

Contexte

Vous avez été chargé de prendre des notes pour une réunion. Vous commencez à taper sur votre document Google, mais vous n'avez pas assez de temps pendant la réunion pour regarder votre clavier pendant que vous tapez.

Heureusement pour vous, vous pouvez taper sans regarder votre clavier. Après la réunion, vous vous rendez compte que tout ce que vous avez tapé était une touche à gauche.

Le défi

Pour ce défi, vous utiliserez les lettres, les chiffres et la barre d'espace de la disposition du clavier QWERTY.

  • Étant donné une entrée de texte (à partir de n'importe quelle méthode de saisie standard), sortez le texte résultant, où chaque caractère est déplacé d'un à gauche sur le clavier.

    • Pour la majorité des lettres, il suffit de regarder la lettre et de la traduire dans la lettre de gauche ( cdevient x, tdevient r, etc.).

    • Pour la lettre q, traduisez en un caractère de tabulation littéral ( \t).

    • Pour la lettre a, activez le verrouillage des majuscules, de sorte que la mise en majuscule du reste de la chaîne est inversée.

    • Pour la lettre z, mettez en majuscule la lettre suivante dans la chaîne.

    • Aucune traduction n'est requise pour la barre d'espace.

  • Conservez les majuscules pendant la traduction et faites attention au verrouillage des majuscules (si le verrouillage des majuscules est activé, assurez-vous que le cas est le contraire).

  • Tous les caractères de la chaîne d'entrée seront des lettres, des chiffres ou un espace. Aucune ponctuation ou autre caractère ne peut être inclus.

Cas de test

\t est un caractère de tabulation littéral

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

Notation

Le score le plus bas en octets gagne. S'amuser!

Branchez votre chargeur
la source
11
Une référence rapide des rangées pertinentes du clavier QWERTY serait utile et maintiendrait le défi autonome
Jo King
4
Les nombres sont-ils décalés jusqu'à la ponctuation s'il y avait un "Z" avant eux?
ErikF
10
Mais Z correspond au décalage ...?
Chaîne sans rapport
4
Cas de test suggéré: Azerty->wERT
Jitse
5
Pour la lettre z, mettez en majuscule la lettre suivante dans la chaîne -> cela signifie-t-il que nous devons seulement nous soucier de la capitalisation des lettres et ne pas avoir à basculer entre les chiffres et les symboles? Quelle est la sortie attendue pour 0123456789, a0123456789et z0z1z2z3z4z5z6z7z8z9? (En outre, sur de nombreux claviers non QWERTY, 'Caps Lock' agit vraiment comme un 'Shift Lock'. Je pense que QWERTY ne suit pas ce modèle, mais il devrait être spécifié pour ceux d'entre nous qui ne le connaissent pas. )
Arnauld

Réponses:

11

JavaScript (V8) , 271 octets

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

Essayez-le en ligne! Mon premier golf en code JavaScript. Cela pourrait certainement être plus court, mais je pense que c'est un bon début.
Il trouve essentiellement chaque caractère dans la kchaîne et le remplace par le précédent, puis échange la casse de tout entre le Aou aet supprime toutes les occurrences de Zou z(car la touche Maj ne fait rien par elle-même).
Cela devrait être une disposition de clavier QWERTY normale, mais faites-le moi savoir si non.

Matthew Jensen
la source
Dans votre propre lien TIO, zebras=>wveAle cas de test semble être incorrect. Le premier zdevrait entraîner l' eimpression de majuscules w. From OP: "Pour la lettre z, mettez en majuscule la lettre suivante dans la chaîne."
Night2
@ Night2 Cheers, j'ai posté avant que OP ne fasse la clarification. J'ai supposé que le fait d'appuyer une fois sur la touche Maj ne ferait rien.
Matthew Jensen
5

Python 3 , 211 octets

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'

Essayez-le en ligne!

Utilise une chaîne de recherche dans laquelle le caractère normal et sa version modifiée par décalage sont regroupés. Pour chaque caractère en entrée, il récupérera le caractère deux places à gauche. Modifie la mise en majuscule en ajoutant 1(ou -1si le caractère actuel est en majuscule) à la valeur de recherche lorsque le verrouillage Maj XOR est activé. Les nombres ne sont pas influencés par le modificateur de verrouillage des majuscules.

Jitse
la source
2

PHP , 227 octets

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;

Essayez-le en ligne!

J'ai créé une chaîne de mappage ( ~1!2@3#4$5%6^7&8*9(0 qwertyuiopasdfghjklzxcvbnm) qui pour chaque chiffre a son mode SHIFT à gauche et pour chaque lettre a la lettre / clé à gauche.

Je boucle sur les caractères saisis et pour chaque caractère:

  • Si le caractère est aou A, l'indicateur de verrouillage des majuscules est inversé (pas logique).
  • Si le caractère est zou Z, l'indicateur de décalage est défini sur 1.
  • Lorsque le personnage n'est pas dans aAzZ:
    • Le caractère à gauche du caractère actuel dans la chaîne de mappage est stocké dans $t.
    • Si le caractère actuel est un espace, il est imprimé.
    • Si le caractère actuel est un chiffre, et si l'indicateur de décalage est 1, $test imprimé, sinon, si le chiffre est 1, `est imprimé, si le chiffre est 0, 9est imprimé et sinon, digit-1est imprimé.
    • Si le caractère actuel est une lettre, en fonction de l'état du drapeau de décalage, le drapeau de verrouillage des majuscules et le boîtier du caractère actuel (inférieur / supérieur), $ten minuscules ou en majuscules, sont imprimés. Le seul cas spécial ici est le caractère de tabulation, qui est imprimé tel quel.
    • Le drapeau de décalage est toujours remis 0à la fin.
Nuit2
la source
2

Rouge , 218 octets

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

Essayez-le en ligne!

Actuellement, AaZzn'affecte pas les chiffres.

Galen Ivanov
la source
Cela ne semble pas fonctionner'A pear' -> ' OWe'
Jitse
@Jitse Hmm
Galen Ivanov
@Jitse Mais vraiment ne fonctionne pas bien avec les chiffres, ce n'est pas tout à fait clair de l'OP
Galen Ivanov
2
Je suis d'accord, le défi est très ambigu tel quel.
Jitse
2

C (gcc) , 276 octets

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

Merci à plafondcat pour -33 octets.

Essayez-le en ligne!

Girobuz
la source
Suggérer k^=!(l^7)au lieu dek=l^7?k:!k
plafondcat