菜单快捷方式
传统上,用户菜单可通过键盘快捷键(例如)访问Alt + (a letter)
,甚至在所有文本框都未聚焦时(gmail样式)也可以直接按字母。
你的任务
给定菜单项作为输入,您的任务是为每个菜单项授予适当的快捷键。
编写一个接受一组单词的函数或程序-菜单项(以字符串数组或您的语言等效形式),并从单个字母到菜单项返回字典或哈希图。
您可以使用参数并返回值,也可以使用STDIN并将结果输出到STDOUT。您不能假定全局/作用域变量已使用输入填充。
确定正确字母的算法
- 基本上,这是单词的第一个可用字母。请参见下面的假设和示例。
- 如果所有条目的字母都不可用,则快捷方式将为
(a letter) + (a number)
。您从条目中选择哪个字母是任意的。该数字应从0开始并以1递增-这样所有快捷方式都是唯一的。请参阅下面的第三个示例。
假设条件
- 输入将是一个Set,即没有重复,每个条目都是唯一的。
- 输入的长度可以是任何非负整数(最多为您的语言的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。
第一个条目已经采用了“ a”。因此,对于“ aa”,因为它的两个字母都已被占用,所以得到a0。与b0-b2相同。
—
mattacular 2014年
如果数字用完了怎么办?
—
nderscore 2014年
@nderscore真的有必要吗?
—
seequ 2014年
应该
—
亚当
['ab', 'a']
给{a:'ab', a0:'a'}
还是{b:'ab', a:'a'}
?
@Adám都可以接受。因为您以有序的方式扫描输入数组,所以实现前者会更容易,但是如果出于某种原因您更喜欢后者,那就去吧。
—
雅各布