Ярлыки меню
Традиционно, пользовательские меню доступны с помощью сочетаний клавиш, таких как 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'}
?Ответы:
Javascript ( ES6 )
106105100Эта функция принимает входные данные в виде массива и выводит объект javascript.
Результаты:
Ungolfed / прокомментировал:
источник
['a', 'aa', 'aaa', 'aaaa', 'aaaaa', 'aaaaaa', 'aaaaaaa', 'aaaaaaaa', 'aaaaaaaaa', 'aaaaaaaaaa', 'aaaaaaaaaaa', 'aaaaaaaaaaaa']
, но я думаю, что мы можем игнорировать такие крайние случаи, не так ли?11
? Вы не можете нажать одну клавишу дважды в сочетаниях клавиш: PPython 2.x -
176 170 157114 байтОчень простой подход, но кто-то должен начать игру.
Примеры:
Я думаю, что единственное обязательное объяснение - это код без правил. (Это на самом деле оригинальная версия)
источник
JavaScript (ECMAScript 6) - 107 символов
Объяснение:
тесты:
источник
PHP> = 5,4 - 149 символов
В соответствии со стандартами PHP (здесь вставьте фрагмент кода) ввод не является допустимым JSON, поскольку он использует
'
вместо него"
, поэтому я был немного дерзким, и я использую Input как фактическое объявление переменной:Используя примеры:
Без гольфа это довольно просто:
источник
json_encode
вызов).echo
не работает с массивами; ноprint_r($c);
сделал бы это, сэкономив 9 байтов.str_split(strtoupper($w))
иucfirst($w[0])
может решить это (+21); или$s=strtoupper($w);
(+18)PowerShell ,
9183 байтаПопробуйте онлайн!
Выдает исключение, если правильный ярлык не найден.
раскатали:
источник
PHP, 153 байта
запустить с помощью
php-r '<code>' <<EOF
+ Enter +<word1>
+ Enter +<word2>
+ Enter + ... +EOF
+ Enterработает над argv для 155 байтов :
бежать с
php -r '<code>' <word1> <word2> ...
(-13 байт с определенным глобальным:
foreach($i as$w)
вместоforeach($argv as$i=>$w)if($i)
)источник