Atalhos de menu
Tradicionalmente, os menus do usuário são acessíveis por atalhos de teclado, como Alt + (a letter)
, ou simplesmente pressionando a letra, quando todas as caixas de texto estão fora de foco ( estilo gmail ).
Sua tarefa
Dadas as entradas do menu como uma entrada, sua tarefa é conceder a cada entrada do menu uma letra de atalho adequada.
Escreva uma função ou um programa que aceite um conjunto de palavras - as entradas do menu (como uma matriz de seqüências de caracteres ou seu idioma equivalente) e retorne um dicionário ou um mapa de hash de uma única letra para uma entrada do menu.
Você pode usar um parâmetro e retornar um valor ou usar o STDIN e enviar seus resultados para STDOUT. Você não tem permissão para assumir que uma variável global / escopo já está preenchida com a entrada.
Algoritmo para determinar a letra correta
- Basicamente, é a primeira letra disponível da palavra. Veja suposições e exemplos abaixo.
- Caso todas as letras da entrada não estejam disponíveis, o atalho será
(a letter) + (a number)
. Qual letra você escolhe da entrada é arbitrária. O número deve começar de 0 e ser incrementado por 1 - de modo que todos os atalhos sejam exclusivos. Veja o terceiro exemplo abaixo.
Premissas
- A entrada será um conjunto, ou seja, sem repetições, cada entrada é única.
- O comprimento da entrada pode ser qualquer número inteiro não negativo (até MAX_INT do seu idioma).
- Distinção entre maiúsculas e minúsculas: a entrada diferencia maiúsculas de minúsculas (mas permanecerá exclusiva ao ignorar maiúsculas e minúsculas). Os resultados devem conter as entradas originais com sua caixa original. No entanto, as letras de atalho de saída não diferenciam maiúsculas de minúsculas.
- Todas as palavras de entrada não terminam com números.
- Nenhuma "entrada ruim" será testada. "Entrada incorreta" é tal que você precisa incrementar o contador de uma determinada letra mais de 10 vezes.
Exemplos
Os exemplos abaixo estão em JSON, mas você pode usar o idioma equivalente para uma matriz e um dicionário ou, caso esteja usando STD I / O, qualquer formato legível para sua entrada e saída (como csv ou até espaço). valores separados).
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'}
Condições vencedoras
O menor código vence. Somente ASCII é permitido.
['ab', 'a']
dar {a:'ab', a0:'a'}
ou {b:'ab', a:'a'}
?