Ярлыки меню
Традиционно, пользовательские меню доступны с помощью сочетаний клавиш, таких как Alt + (a letter)или даже простое нажатие на букву, когда все текстовые поля не сфокусированы ( стиль gmail ).
Твое задание
С учетом пунктов меню в качестве входных данных ваша задача состоит в том, чтобы назначить каждой записи меню правильную комбинацию букв.
Напишите функцию или программу, которая принимает набор слов - записи меню (в виде массива строк или вашего языкового эквивалента) и возвращает словарь или хэш-карту из одной буквы в элемент меню.
Вы можете либо использовать параметр и вернуть значение, либо использовать STDIN и вывести свои результаты в STDOUT. Вы не можете предполагать, что глобальная переменная / область видимости уже заполнена вводом.
Алгоритм определения правильного письма
- По сути это первая доступная буква слова. Смотрите предположения и примеры ниже.
- В случае, если все буквы ввода не доступны, ярлык будет
(a letter) + (a number). Какое письмо вы выбираете из записи - произвольное. Число должно начинаться с 0 и увеличиваться на 1, чтобы все ярлыки были уникальными. Смотрите третий пример ниже.
Предположения
- На входе будет Set, то есть без повторов, каждая запись уникальна.
- Длина ввода может быть любым неотрицательным целым числом (до MAX_INT вашего языка).
- Чувствительность к регистру: ввод чувствителен к регистру (но при игнорировании регистра будет оставаться уникальным). Результаты должны содержать исходные записи с оригинальным регистром. Однако выходные ярлыки не чувствительны к регистру.
- Все вводимые слова не будут заканчиваться цифрами.
- Никакой «злой вклад» не будет проверен. «Злой ввод» таков, что вам нужно увеличить счетчик определенной буквы более чем в 10 раз.
Примеры
Приведенные ниже примеры приведены в формате JSON, но вы можете использовать свой языковой эквивалент для массива и словаря или - в случае использования ввода-вывода STD - любой читаемый формат для ввода и вывода (например, csv или даже пробел). разделенные значения).
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'}
Условия выигрыша
Самый короткий код выигрывает. Разрешен только ASCII.
['ab', 'a']дать {a:'ab', a0:'a'}или {b:'ab', a:'a'}?