Raccourcis du menu
Traditionnellement, les menus utilisateur sont accessibles par des raccourcis clavier, tels que Alt + (a letter)
, ou même simplement en tapant la lettre lorsque toutes les zones de texte sont floues ( style gmail ).
Ta tâche
Étant donné les entrées de menu en entrée, votre tâche consiste à attribuer à chaque entrée de menu une lettre de raccourci appropriée.
Écrivez une fonction ou un programme qui accepte un ensemble de mots - les entrées de menu (sous forme de tableau de chaînes ou l'équivalent de votre langue) et renvoie un dictionnaire ou une table de hachage, d'une seule lettre à une entrée de menu.
Vous pouvez soit utiliser un paramètre et renvoyer une valeur, soit utiliser le STDIN et envoyer vos résultats à STDOUT. Vous n'êtes pas autorisé à supposer qu'une variable globale / portée est déjà remplie avec l'entrée.
Algorithme pour déterminer la bonne lettre
- Fondamentalement, c'est la première lettre disponible du mot. Voir les hypothèses et exemples ci-dessous.
- Si toutes les lettres de l'entrée ne sont pas disponibles, le raccourci sera
(a letter) + (a number)
. La lettre que vous choisissez dans l'entrée est arbitraire. Le nombre doit commencer à 0 et être incrémenté de 1, de sorte que tous les raccourcis soient uniques. Voir le troisième exemple ci-dessous.
Hypothèses
- L'entrée sera un ensemble, c'est-à-dire sans répétition, chaque entrée est unique.
- La longueur de l'entrée peut être n'importe quel entier non négatif (jusqu'à MAX_INT de votre langue).
- Sensibilité à la casse: L'entrée est sensible à la casse, (mais restera unique en ignorant la casse). Les résultats doivent contenir les entrées originales avec leur boîtier d'origine. Cependant, les lettres de raccourci de sortie ne sont pas sensibles à la casse.
- Tous les mots saisis ne se termineront pas par des chiffres.
- Aucune "mauvaise entrée" ne sera testée. "L'entrée du mal" est telle que vous devez incrémenter le compteur d'une certaine lettre plus de 10 fois.
Exemples
Les exemples ci-dessous sont en JSON, mais vous pouvez utiliser votre équivalent de langue pour un tableau et un dictionnaire, ou - dans le cas où vous utilisez des E / S STD - n'importe quel format lisible pour vos entrées et sorties (comme csv, ou même espace- valeurs séparées).
1.
Input: ['File', 'Edit', 'View', 'Help']
Output: {f:'File', e:'Edit', v:'View', h:'Help'}
2.
Input: ['Foo', 'Bar', 'FooBar', 'FooBars']
Output: {f:'Foo', b:'Bar', o:'FooBar', a:'FooBars'}
3.
Input: ['a', 'b', 'aa', 'bb', 'bbq', 'bbb', 'ba']
Output: {a:'a', b:'b', a0:'aa', b0:'bb', q:'bbq', b1:'bbb', b2:'ba'}
Conditions gagnantes
Le code le plus court gagne. Seul ASCII est autorisé.
['ab', 'a']
donner {a:'ab', a0:'a'}
ou {b:'ab', a:'a'}
?