Réparer mes gros doigts


21

Code Golf Challenge

J'ai un retard, mes doigts sont gros et j'envoie fréquemment un retard de ligaturer [une touche à droite sur mon kryboard.

J'ai bien peur que la situation ne devienne pire et s'aggrave avec le temps.

Sopn chaque touche que je fais wil; soyez pif shiftrd vers la droite!

Befpre alors je voudrais un programme (ou functipn) pour décaler automatiquement chaque touche sur la gauche.

Je vais m'assurer de prendre mon tome en tapant le reste de tjis chal; enge pour ne pas provoquer la confusion anu!


Objectif:

Écrivez un programme ou une fonction qui prend une entrée de l'une des touches vertes suivantes sur un clavier QWERTY standard et renvoie le caractère de la touche une à sa gauche.entrez la description de l'image ici


Conditions:

• Vous pouvez supposer que la personne exécutant ce programme utilise un clavier QWERTY comme celui illustré ci-dessus.

• L'entrée et la sortie ne respectent pas la casse, vous pouvez utiliser n'importe quel cas (ou un mélange de combinaisons de cas) pour ce défi et vous pouvez également supposer que toutes les entrées seront dans un cas si vous le souhaitez.

• Si votre langue n’a aucun moyen de permettre à un utilisateur de saisir la touche de retour pour une raison quelconque, vous pouvez ignorer cette

• Ce défi concerne uniquement les valeurs par défaut des touches, par exemple, si la 4touche est enfoncée, vous pouvez supposer que ce sera toujours 4et jamais$

• Vous pouvez supposer que seules les touches vertes seront pressées.


Exemple Input-> Output:

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


Il s'agit de , donc le programme avec le nombre de bytecount le plus court gagne!


Pourriez-vous fournir des tests?
Kritixi Lithos

1
@KritixiLithos Certaimly! Je vais éditer tjat maintenant @
Albert Renshaw

Voulez-vous dire ]-> [?
shooqie


3
Cela ne vous dérange peut-être pas, mais voici une anecdote intéressante: il s'agit d'une disposition de clavier ANSI. Notez la barre oblique inverse au-dessus de la touche Entrée; contrairement à un clavier ISO, dans lequel le bouton barre oblique inverse est à gauche de Z. (C'est aussi américain, mais c'est plus facile à identifier!)
Doddy

Réponses:


7

Rubis, 76 71 69 octets

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

5

Perl 6 , 87 83 69 octets

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

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

Essayez-le en ligne!

Vous vous demandez s'il existe un moyen de coder cette chaîne codée en dur en quelque chose de plus court ...

( L'idée regex de Stole GB pour -14 octets.)


1
Peut-être que si nous avions $"les gammes, nous pourrions sauver quelques caractères
Ven

5

Gelée , 34 33 octets

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

Essayez-le en ligne!

Comment ça marche

Ø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
Je ne connais pas Jelly, pouvez-vous ajouter une explication de votre code? Je suis curieux de savoir comment vous vous en êtes sorti sans avoir tapé une chaîne de caractères de tout le clavier
Albert Renshaw

1
Je n'ai pas encore eu le temps, mais je vais ajouter une explication dès que possible.
Dennis

1
Terminé. J'ai aussi joué un peu au golf.
Dennis

1
Øqchouette! J'aime ça, merci!
Albert Renshaw le

4

Python 3, 85 78 octets:

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

1
Vous pouvez passer la chaîne comme paramètre facultatif, en utilisant 1 lambda: lambda x,k="1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm<>?":k[k.find(x)-1]pour réduire quelques octets
Rod

Bon point, je vais ajouter cela.
L3viathan

Je pense que vous avez besoin d'un backtick pour être à gauche de 1.
xnor

@xnor Right, a corrigé cela.
L3viathan

4

Python , 76 octets

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

Essayez-le en ligne!

Crée un dictionnaire qui prend chaque touche vers celle à gauche en zippant la chaîne de caractères avec sa version décalée. La ligne du bas est la fonction, celle du haut est une définition.

Utiliser translatepour créer un mappage a donné une solution plus longue. Essayez-le en ligne!

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

4

Rétine , 53 51 octets

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

Essayez-le en ligne!

Une translittération simple déplaçant chaque position de caractère 1 vers l'arrière. Tout de 1à /est le jeu de caractères d'origine, tandis que la partie suivante est le nouveau jeu, en utilisant opour indiquer l'autre jeu.

Het Lsont des classes de caractères spéciales pour la translittération dans la rétine (respectivement mappage sur des chiffres hexadécimaux et des lettres majuscules), mais heureusement, elles se produisent sur le clavier à l'intérieur de séquences ordonnées alfabétiquement ( FGHet JKL), afin que nous puissions éviter de les échapper en les mettant dans des plages et en gagnant comme ça 2 octets.


3

C ++, 109 octets

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

Essayez-le en ligne!


3

TI-Basic, 70 octets

Je doute que ça puisse être plus court que ça ...

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

PS Les jetons à deux octets sont Str1, `, \, sub(et inString(.


3

V , 57 54 51 octets

3 octets enregistrés grâce à @ nmjcman101 pour avoir utilisé à la hxVpplace de ce que j'avais pour le clavier multiligne

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

Essayez-le en ligne!

<esc>est 0x1bet <c-r>est0x12

Remarque: cela ne prend pas en charge la touche entrée

Contient des non imprimables, voici donc l'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

Explication

La plupart du programme génère le clavier. ipasse en mode d'insertion et chaque caractère suivant est imprimé dans le tampon. Mais il y a une petite bizarrerie ici,¬19 insère des caractères entre 1 et 9.

Le programme quitte le mode d'insertion à <esc>. Et puis ici, /<c-r>ail recherche l'argument dans le tampon. Cela place le curseur sur le personnage trouvé.

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

Je ne suis pas à 100%, mais je pense qu'au lieu de hylHVGpvous, vous pouvez faire ce que @DJMcMayhem a fait dans la question de la moto hxVp. Je ne sais pas pourquoi tu as mis ça Gdedans, n'est-ce pas une seule ligne? Fonctionnerait également dhVp.
nmjcman101

@ nmjcman101 Ah oui, je dois avoir gardé le Gdepuis quand le clavier était multiligne. Merci!
Kritixi Lithos

2

PowerShell, 82 octets

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

La touche Entrée est prise en charge, mais ne peut pas être testée avec, Read-Hostcar l'activation de la touche Entrée sans valeur ne renvoie rien dans PowerShell.


2

Japt , 56 42 octets

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

Explication

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

Essayez-le en ligne!


Celui-ci est cool, pouvez-vous ajouter une explication?
Albert Renshaw

1
@AlbertRenshaw Ajout d'une explication.
Oliver

2

Java 8, 99 octets

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

Explication:

Essayez-le ici.

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
J'abandonne. Je tentais de le faire avec regex, mais je ne misérablement avec quelques caractères spéciaux ... c->"`1234567890-=qwertyuiop[]\\asdfghjkl;'\nzxcvbnm,./".replaceAll("(?s).*(.)"+c+".*","$1").
Olivier Grégoire du

2

JavaScript (ES6), 74 octets

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

Étant donné que /n'est pas dans ma chaîne, indexOfrenvoie -1, qui, lorsqu'il est incrémenté, provoque .la sortie. 93 octets pour traiter une chaîne:

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

@KevinCruijssen Merci d'avoir remarqué que j'avais accidentellement déplacé ces trois touches. Je les ai décalés maintenant.
Neil

1

GNU sed , 72 + 1 (drapeau r) = 73 octets

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

La clé de retour ne peut pas être testée, car sed par conception fractionne l'entrée en utilisant \ncomme délimiteur, puis exécute le script autant de fois qu'il y a de lignes.

Test: paire d'entrée-sortie continue (une fois terminé, appuyez sur Ctrl + D ou Ctrl + C)

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

1

05AB1E , 50 octets

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

Essayez-le en ligne!

Explication:

'`                                                  # 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))

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.