メニューのショートカット
従来、ユーザーメニューには、などのキーボードショートカットを使用してアクセスしAlt + (a letter)
たり、すべてのテキストボックスがフォーカスされていない場合(Gmailスタイル)に文字を入力するだけでアクセスしたりできます。
あなたのタスク
入力としてメニューエントリが与えられた場合、タスクは各メニューエントリに適切なショートカット文字を付与することです。
一連の単語-メニューエントリ(文字列の配列または同等の言語として)を受け入れ、辞書またはハッシュマップを1文字からメニューエントリに返す関数またはプログラムを記述します。
パラメータを使用して値を返すか、STDINを使用して結果をSTDOUTに出力できます。グローバル/スコープ変数がすでに入力されていると想定することはできません。
適切な文字を決定するアルゴリズム
- 基本的にそれは単語の最初の利用可能な文字です。以下の仮定と例を参照してください。
- すべてのエントリの文字が利用できない場合、ショートカットはになります
(a letter) + (a number)
。エントリからどの文字を選ぶかは任意です。番号は0から始まり、1ずつ増加する必要があります-すべてのショートカットが一意になるようにします。以下の3番目の例を参照してください。
仮定
- 入力はセットになります。つまり、繰り返しはなく、すべてのエントリは一意です。
- 入力の長さは、負でない整数(言語の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'}
?