Il semble exister cet engouement persistant pour les personnes qui apprennent de manière laborieuse de nouvelles configurations de clavier comme Dvorak ou Neo, car cela les rend soi-disant plus productives. Je soutiens que changer de disposition du clavier est une mauvaise idée car cela peut prendre des mois avant de devenir rapide et quand vous êtes finalement 5% plus rapide que le reste, vous êtes foutu si vous devez taper sur un ordinateur qui n'est pas pas la vôtre.
En outre, toutes ces personnes oublient le véritable goulet d'étranglement de la communication moderne: le clavier du téléphone.
Voici à quoi ressemble votre clavier téléphonique moyen:
La lettre 'r' est la troisième lettre du bouton 7; ainsi, si vous deviez taper la lettre «r» sur un téléphone portable, vous auriez appuyé trois fois sur la touche 7, 4 fois sur «7» et une fois sur la touche 2.
En considérant cela, mettre 'e' après 'd' était probablement une mauvaise décision - 'e' est la lettre la plus utilisée dans l'alphabet anglais, donc si vous deviez étiqueter le bouton 3 "EDF" au lieu de "DEF", permettrait d'économiser beaucoup de frappes.
De plus, vous vous êtes probablement déjà rendu compte que taper 2 lettres qui partagent le même bouton est une nuisance - si vous voulez écrire "TU", vous ne pouvez pas appuyer simplement sur 8 trois fois, car cela donnerait "V". Donc, généralement, vous écrivez «T», puis appuyez sur espace, puis sur retour arrière, puis écrivez «U», ce qui équivaut à 5 pressions de bouton au lieu de 3.
TL; DR
Étant donné ces deux règles:
- Une lettre est tapée n fois, en appuyant sur un bouton, où n est l'emplacement où se trouve la lettre sur l'étiquette du bouton.
- L'écriture de deux lettres tapées à l'aide du même bouton nécessite 2 appuis supplémentaires.
Quelle est la disposition du clavier du téléphone qui nécessite le moins d'appuis au clavier, en fonction d'un texte spécifique? Vous ne devez utiliser que les boutons 2 à 9, 1 et 0 réservés aux symboles spéciaux.
Contribution
Le texte pour lequel vous devez trouver la mise en page optimale est fourni via stdin. Vous n'avez pas besoin de manipuler autre chose que l'alphabet minuscule et pouvez supposer que la saisie est constituée de seulement cela. Vous pouvez également supposer que le texte saisi est relativement long et que chaque lettre y est insérée au moins une fois, si cela vous aide.
Sortie
Je ne veux pas imposer trop de contraintes à la sortie, car cela donne parfois des avantages à certaines langues par rapport à d’autres; donc, cependant, votre langue montre que les tableaux sont bons, sinon vous pouvez séparer chaque étiquette avec une nouvelle ligne.
Il peut y avoir plusieurs mises en page optimales possibles, vous pouvez en imprimer une seule. Voici un exemple simple:
>> echo "jackdawslovemybigsphinxofquartz" | foo.sh
ojpt
avhz
cen
skm
dyf
wbq
ixu
lgr
Points bonus
-35 si votre algorithme ne force pas toutes les mises en page possibles (je regarde les "permutations" de Haskell ici)
-3 Si votre code correspond à un message texte (140 caractères) et que vous postez une photo de vous en envoyant votre code à un ami.
Ceci est mon premier défi sur StackExchange. Je serais heureux de savoir si vous l'aimez ou si vous avez d'autres commentaires à ce sujet!
26! / (2! * 6!) = 280,063,514,671,253,913,600,000 > 2^77
des permutations uniques, qui ne comptent qu'une seule fois les réarrangements des clés.