Ярлики меню
Традиційно до меню користувачів доступні комбінації клавіш, наприклад Alt + (a letter)
, або навіть просто натискання на літеру, коли всі текстові поля розфокусовані ( стиль gmail ).
Ваше завдання
Враховуючи записи меню як вхідні дані, ваше завдання - надати кожному запису меню відповідний короткий лист.
Напишіть функцію або програму, яка приймає набір слів - записи в меню (як масив рядків, або ваш мовний еквівалент), і повертає словник або хешмап з однієї літери до пункту меню.
Ви можете використовувати параметр і повертати значення, або використовувати STDIN і виводити свої результати в STDOUT. Вам не дозволяється припускати, що глобальна / область змінної вже заповнена введенням.
Алгоритм визначення правильної літери
- В основному це перша доступна літера цього слова. Дивіться припущення та приклади нижче.
- Якщо всі листи вхідні не доступні, це буде ярлик
(a letter) + (a number)
. Який лист ви виберете із запису довільним. Число повинно починатися від 0 і збільшуватися на 1 - таким чином, щоб усі ярлики були унікальними. Дивіться третій приклад нижче.
Припущення
- Вхід буде набором, тобто немає повторень, кожен запис унікальний.
- Довжина вводу може бути будь-яким невід’ємним цілим числом (до MAX_INT вашої мови).
- Чутливість до регістру: Вхідні дані залежать від регістру (але залишатимуться унікальними при ігноруванні регістру) Результати повинні містити оригінальні записи з оригінальним кожухом. Однак вихідні ярлики не відрізняються від регістру.
- Усі введені слова не закінчуються цифрами.
- Жоден "злий вклад" не буде перевірений. "Злий вхід" такий, що вам потрібно збільшити лічильник певної літери більше 10 разів.
Приклади
Приклади нижче наведені в JSON, але ви можете використовувати свій мовний еквівалент для масиву та словника, або - у випадку, якщо ви використовуєте STD I / O - будь-який читаний формат для введення та виводу (наприклад, 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'}
?