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'}
?Réponses:
Javascript ( ES6 )
106105100Cette fonction prend l'entrée comme un tableau et génère un objet javascript.
Résultats:
Non golfé / commenté:
la source
['a', 'aa', 'aaa', 'aaaa', 'aaaaa', 'aaaaaa', 'aaaaaaa', 'aaaaaaaa', 'aaaaaaaaa', 'aaaaaaaaaa', 'aaaaaaaaaaa', 'aaaaaaaaaaaa']
, mais je pense que nous pouvons ignorer ces cas extrêmes, n'est-ce pas?11
? Vous ne pouvez pas appuyer deux fois sur la même touche dans un raccourci clavier: PPython 2.x -
176170157114octetsApproche très simple, mais quelqu'un doit lancer le jeu.
Exemples:
Je pense que la seule explication requise est le code non golfé. (Il s'agit en fait de la version originale)
la source
JavaScript (ECMAScript 6) - 107 caractères
Explication:
Tests:
la source
PHP> = 5,4 - 149 caractères
Selon les normes PHP (insérez des sniggers ici) , l'entrée n'est pas JSON valide car elle utilise à la
'
place de"
, donc j'ai été un peu effronté et j'utilise l'entrée comme une déclaration de variable réelle:En utilisant les exemples:
Non golfifié, c'est assez basique:
la source
json_encode
invocation).echo
ne fonctionne pas avec les tableaux; mais leprint_r($c);
ferait, économisant 9 octets.str_split(strtoupper($w))
etucfirst($w[0])
peut résoudre cela (+21); ou$s=strtoupper($w);
(+18)PowerShell ,
9183 octetsEssayez-le en ligne!
Il lève une exception si un raccourci approprié est introuvable.
Déroulé:
la source
PHP, 153 octets
courir avec
php-r '<code>' <<EOF
+ Entrée +<word1>
+ Entrée +<word2>
+ Entrée + ... +EOF
+ Entréetravailler sur argv pour 155 octets :
courir avec
php -r '<code>' <word1> <word2> ...
(-13 octets avec un global défini:
foreach($i as$w)
au lieu deforeach($argv as$i=>$w)if($i)
)la source