Scorciatoie del menu
Tradizionalmente, i menu utente sono accessibili tramite scorciatoie da tastiera, come Alt + (a letter)
, o anche semplicemente colpire la lettera quando tutte le caselle di testo sono sfocate ( stile gmail ).
Il tuo compito
Considerate le voci di menu come input, il tuo compito è quello di assegnare a ciascuna voce di menu una lettera di scelta rapida appropriata.
Scrivi una funzione o un programma che accetta un insieme di parole: le voci di menu (come una matrice di stringhe o l'equivalente della tua lingua) e restituisce un dizionario o hashmap da una singola lettera a una voce di menu.
È possibile utilizzare un parametro e restituire un valore oppure utilizzare STDIN e inviare i risultati a STDOUT. Siete Non permesso di assumere una variabile globale / portata è già popolato con l'ingresso.
Algoritmo per determinare la lettera corretta
- Fondamentalmente è la prima lettera disponibile della parola. Vedi ipotesi ed esempi di seguito.
- Nel caso in cui tutte le lettere della voce non siano disponibili, il collegamento sarà
(a letter) + (a number)
. La lettera che scegli dalla voce è arbitraria. Il numero dovrebbe iniziare da 0 ed essere incrementato di 1, in modo tale che tutte le scorciatoie siano univoche. Vedi il terzo esempio di seguito.
ipotesi
- L'input sarà un Set, cioè nessuna ripetizione, ogni voce è unica.
- La lunghezza dell'input può essere qualsiasi numero intero non negativo (fino a MAX_INT della tua lingua).
- Distinzione tra maiuscole e minuscole: l'ingresso fa distinzione tra maiuscole e minuscole (ma rimarrà unico quando si ignora il caso). I risultati dovrebbero contenere le voci originali con il loro involucro originale. Tuttavia, le lettere di scelta rapida di output non fanno distinzione tra maiuscole e minuscole.
- Tutte le parole di input non finiranno con i numeri.
- Nessun "input malefico" verrà testato. "Input malefico" è tale che devi incrementare il contatore di una determinata lettera più di 10 volte.
Esempi
Gli esempi seguenti sono in JSON, ma puoi usare l'equivalente della tua lingua per un array e un dizionario o, nel caso in cui usi I / O STD, qualsiasi formato leggibile per i tuoi input e output (come csv, o anche space- valori separati).
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'}
Condizioni vincenti
Il codice più corto vince. È consentito solo ASCII.
['ab', 'a']
dare {a:'ab', a0:'a'}
o {b:'ab', a:'a'}
?