Skróty menu
Tradycyjnie menu użytkownika są dostępne za pomocą skrótów klawiaturowych, takich jak Alt + (a letter), a nawet po prostu naciśnięcie litery, gdy wszystkie pola tekstowe są nieaktywne ( styl Gmaila ).
Twoje zadanie
Biorąc pod uwagę pozycje menu jako dane wejściowe, Twoim zadaniem jest nadanie każdej pozycji menu odpowiedniej litery skrótu.
Napisz funkcję lub program, który akceptuje zestaw słów - pozycje menu (jako tablicę ciągów lub odpowiednik języka) i zwraca słownik lub skrót od jednej litery do pozycji menu.
Możesz albo użyć parametru i zwrócić wartość, albo użyć STDIN i wyprowadzić wyniki do STDOUT. Teraz nie wolno zakładać zmienną globalną / zakres jest już wypełniona wejścia.
Algorytm określający właściwą literę
- Zasadniczo jest to pierwsza dostępna litera tego słowa. Zobacz założenia i przykłady poniżej.
- W przypadku, gdy wszystkie litery wpisów nie są dostępne, skrót będzie
(a letter) + (a number). Która litera, którą wybierzesz z wpisu, jest dowolna. Liczba powinna zaczynać się od 0 i być zwiększana o 1 - tak, aby wszystkie skróty były unikalne. Zobacz trzeci przykład poniżej.
Założenia
- Wejście będzie zbiorem, tzn. Bez powtórzeń, każdy wpis jest unikalny.
- Długość wejścia może być dowolną nieujemną liczbą całkowitą (do MAX_INT twojego języka).
- Rozróżnianie wielkości liter: w danych wejściowych rozróżniana jest wielkość liter, (ale pozostanie unikalna, gdy ignoruje wielkość liter). Wyniki powinny zawierać oryginalne wpisy w oryginalnej obudowie. Jednak w wyjściowych literach skrótów nie jest rozróżniana wielkość liter.
- Wszystkie wprowadzone słowa nie kończą się cyframi.
- Żadne „złe wejście” nie będzie testowane. „Złe wejście” powoduje, że musisz zwiększyć licznik pewnej litery więcej niż 10 razy.
Przykłady
Poniższe przykłady są w języku JSON, ale możesz użyć swojego odpowiednika językowego dla tablicy i słownika lub - w przypadku korzystania ze STD I / O - dowolnego czytelnego formatu dla danych wejściowych i wyjściowych (np. Csv, a nawet spacja- wartości rozdzielone).
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'}
Warunki wygranej
Najkrótszy kod wygrywa. Dozwolone jest tylko ASCII.
['ab', 'a']dać {a:'ab', a0:'a'}lub {b:'ab', a:'a'}?