La disposition du clavier que les gens utilisent couramment est la disposition QWERTY comme indiqué ci-dessous.
Mais il existe également d'autres dispositions de clavier:
DVORAK
COLEMAK
Ta tâche
Votre code prendra deux entrées: le nom de la disposition du clavier et une chaîne à transcrire. Votre objectif est de convertir votre entrée QWERTY comme si vous tapiez avec la disposition du clavier donnée comme premier paramètre.
Règles
Le format d'entrée est gratuit, vous pouvez utiliser des chaînes, des tableaux, etc.
Il vous suffit de manipuler les touches avec un fond blanc. Plus précisément, vous devez transposer les caractères ASCII imprimables de l'alphabet QWERTY à l'un des autres alphabets:
QWERTY: !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
DVORAK: !_#$%&-()*}w[vz0123456789SsW]VZ@AXJE>UIDCHTNMBRL"POYGK<QF:/\=^{`axje.uidchtnmbrl'poygk,qf;?|+~
COLEMAK: !"#$%&'()*+,-./0123456789Oo<=>?@ABCSFTDHUNEIMKY:QPRGLVWXJZ[\]^_`abcsftdhuneimky;qprglvwxjz{|}~
WORKMAN: !"#$%&'()*+,-./0123456789Ii<=>?@AVMHRTGYUNEOLKP:QWSBFCDXJZ[\]^_`avmhrtgyuneolkp;qwsbfcdxjz{|}~
(Remarque: cela a été transcrit à la main par @ETHproductions, donc si vous voyez des erreurs, veuillez les signaler!)
Exemple
DVORAK zZxX
comme entrée donnera comme sortie ;:qQ
Il s'agit de code-golf, donc la réponse la plus courte en octets l'emporte!
!_#$%&-()*}w[vz0123456789SsW]VZ@AXJE>UIDCHTNMBRL"POYGK<QF:/\=^{`axje.uidchtnmbrl'poygk,qf;?|+~
comme entrée pour le clavier Dvorak? Cela banaliserait le défi ... Que diriez-vous d'introduire une restriction de longueur ou quelque chose de similaire?!_#$%&-()*}w[vz0123456789SsW]VZ@AXJE>UIDCHTNMBRL"POYGK<QF:/\=^{`axje.uidchtnmbrl'poygk,qf;?|+~
comme entréeRéponses:
Rubis ,
258247238 octetsEssayez-le en ligne!
Il s'agit d'une fonction prenant deux arguments: le message à échanger et une valeur 0-2 représentant la disposition à échanger, où 0 correspond à Dvorak, 1 à Colemak et 2 à Workman.
Fondamentalement, je ne pense pas que ce soit très différent des autres réponses. Plus lisible, cela ressemble à ceci:
La
string#tr
fonction de Ruby prend deux arguments: une chaîne contenant des caractères à remplacer et une chaîne contenant leurs remplacements. Utilement, il vous permet de spécifier des plages de caractères à l'aide de laa-z
syntaxe. L'autre réalisation clé pour gagner de l'espace est qu'il n'est pas nécessaire d'inclure des caractères identiques dans les quatre dispositions, ce qui m'a permis de me débarrasser de tous les chiffres, de la lettre "A" en majuscule et en minuscule, et d'une poignée de caractères spéciaux.Un autre bit de syntaxe étrange est l'utilisation de
%W()
. Cela crée un tableau de chaînes contenant tout à l'intérieur des parenthèses, séparées par des espaces. Tous les sauts de ligne dans la soumission fonctionnent en fait comme des séparateurs d'éléments.%W()
permet également l'interpolation de chaînes (ce qui est fait avec l'#{}
opérateur) -%w()
aurait été la même chose, mais sans interpolation de chaînes.Je voudrais également prendre un moment pour blâmer Dvorak d'avoir gâché mes plans d'optimisation en insistant pour être totalement différent de tout le monde, tout le temps; une solution Qwerty / Colemak / Workman aurait pu être si magnifiquement courte ...
la source
JavaScript (ES7),
282273251250 octetsPrend un ID de disposition de clavier
k
et un tableau de caractèresa
dans la syntaxe de curry(k)(a)
. Renvoie un tableau de caractères traduits.Les ID de mise en page sont les suivants:
Essayez-le en ligne!
Comment ça fonctionne
Compression
Les trois dispositions cibles sont stockées dans une seule chaîne compressée, où chaque caractère est soit:
Par exemple,
#$%&-()*
dans DVORAK est stocké comme3-2
parce que#$%&
et()*
a des mappages identiques dans QWERTY et-
n'est qu'une traduction réelle.En particulier, il
0123456789
est mappé de la même manière sur toutes les mises en page et n'a jamais à être traduit. Par conséquent, il n'y a aucune ambiguïté possible entre un chiffre utilisé pour la compression et un chiffre utilisé pour la traduction.Décompression
3-2
3375-225
Traduction
Pour chaque caractère
c
dansa
, nous extrayons le caractère de traductiont
, en utilisantk
comme décalage dans la chaîne de mise en page non compressée, et testons s'il s'agit d'un chiffre avec1/t
. Si c'est le cas, nous sortons le caractère original à lac
place.la source
Rétine ,
273270octetsEssayez-le en ligne! Préfixer le message avec une seule lettre
D
,C
ouW
pour la mise en page du clavier souhaitée. Malheureusement, Retina prend en charge un tas de lettres magiques (p
étant évidente, mais j'ai réussi à y glisser und
) qui doivent toutes être citées, sauf que j'ai pu utiliser à lav-x
place dev\wx
. Edit: sauvé 3 octets grâce à @ETHproductions.la source
-
s représentent des plages de caractères, je pense que vous pouvez en enregistrer en changeant<-@ABC
en<-C
.PHP, 364 octets
Le tableau contient 3 tableaux où la clé représente 0 = W, 1 = C, 2 = D
Essayez-le en ligne!
la source
Python 2, 422 octets
J'ai essayé de combiner des mises en page avec une manière intelligente, mais cela n'a pas beaucoup aidé.
Essayez-le en ligne
la source
JavaScript (ES6),
461409404395385 octetsJ'ai écrit la version originale de ce qui suit sur mon téléphone alors que j'étais assis dans un bus, puis j'ai manqué de temps pour bien jouer au golf, donc il y a plus de craquements à suivre. Merci à @ETHproductions pour l'aide jusqu'à présent.
Les cordes du clavier ont été copiées directement à partir de la question, donc blâmez
AntoineETH pour toute erreur!Cela prend un entier représentant la disposition du clavier (0 pour DVORAK, 94 pour COLEMAK & 188 pour WORKMAN) et un tableau de la chaîne comme arguments par curry - par exemple, les
f(0)(["z","Z","x","X"])
sorties;:qQ
.Essayez-le
la source
QWERTY
en entrée, donc je pense que vous pourriez économiser quelques octets en ne stockant pas l'objet dans une variable. Cela ressemblerait à quelque choses=>[...s].map(c=>({D:"...",C:"...",W:"..."}[k[0]]["...".indexOf(c)]).join``
map()
mais j'ai manqué de temps - croyez-le ou non, j'ai écrit cela en étant assis dans le bus pour aller au cinéma. Je vais le mettre à jour avec votre suggestion et quelques améliorations que je me suis repérées demain.05AB1E ,
199192187 octetsUtilise les identifiants
1
pour DVORAK;2
pour COLEMAK et3
pour WORKMAN.Pousse d'abord l'ID, puis la chaîne que nous voulons translittérer.
Essayez-le en ligne ou vérifiez la gamme ASCII complète pour les trois .
Explication:
Consultez cette astuce 05AB1E (section Comment compresser des chaînes ne faisant pas partie du dictionnaire? ) Pour comprendre comment fonctionnent les chaînes compressées.
la source
C ++, 528 octets
Courir avec
./multitrans <0-2> <string>
où 0 = Dvorak, 1 = Colemak et 2 = Workman.J'ai ajouté des nouvelles lignes entre les deux pour rendre le code légèrement plus lisible ci-dessous. Ce code génère une carte de traduction à partir des chaînes où la recherche du caractère Qwerty renvoie la traduction (
t[0]['s'] = 'o'
pour les s dans Dvorak), puis il utilise la carte pour traduire. Les chaînes de traduction sont raccourcies car certains caractères n'ont jamais besoin d'être modifiés. Cependant, il pourrait probablement être encore réduit.Extra: Qwerty -> Dvorak uniquement (197 octets)
J'ai récemment écrit ce code qui transforme Qwerty en Dvorak, bien que les majuscules ne soient pas traduites.
la source
C, 394 octets
Essayez en ligne
la source