Atajos de menú
Tradicionalmente, se puede acceder a los menús de los usuarios mediante métodos abreviados de teclado, como Alt + (a letter)simplemente presionar la letra cuando todos los cuadros de texto están desenfocados ( estilo gmail ).
Tu tarea
Dadas las entradas del menú como entrada, su tarea es otorgar a cada entrada del menú una letra de acceso directo adecuada.
Escriba una función o un programa que acepte un conjunto de palabras: las entradas del menú (como una matriz de cadenas, o su equivalente en el idioma), y devuelve un diccionario o un hashmap, de una sola letra a una entrada del menú.
Puede usar un parámetro y devolver un valor, o usar el STDIN y enviar sus resultados a STDOUT. Usted está no permite asumir una variable global / alcance ya está poblada con la entrada.
Algoritmo para determinar la letra correcta
- Básicamente es la primera letra disponible de la palabra. Ver supuestos y ejemplos a continuación.
- En caso de que todas las letras de la entrada no estén disponibles, el acceso directo sí lo estará
(a letter) + (a number). La letra que eliges de la entrada es arbitraria. El número debe comenzar desde 0 e incrementarse en 1, de modo que todos los accesos directos sean únicos. Ver tercer ejemplo a continuación.
Supuestos
- La entrada será un conjunto, es decir, sin repeticiones, cada entrada es única.
- La longitud de la entrada puede ser cualquier número entero no negativo (hasta MAX_INT de su idioma).
- Sensibilidad a mayúsculas y minúsculas: la entrada distingue mayúsculas de minúsculas (pero se mantendrá única al ignorar mayúsculas y minúsculas) Los resultados deben contener las entradas originales con su carcasa original. Sin embargo, las letras de acceso directo de salida no distinguen entre mayúsculas y minúsculas.
- Todas las palabras de entrada no terminarán con números.
- No se probará ninguna "entrada malvada". La "entrada malvada" es tal que debe incrementar el contador de una letra determinada más de 10 veces.
Ejemplos
Los ejemplos a continuación están en JSON, pero puede usar su equivalente de idioma para una matriz y un Diccionario, o, en caso de que esté usando E / S STD, cualquier formato legible para su entrada y salida (como csv, o incluso espacio- 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'}
Condiciones ganadoras
El código más corto gana. Solo se permite ASCII.
['ab', 'a']dar {a:'ab', a0:'a'}o {b:'ab', a:'a'}?