今日の課題は、t9のような機能を実装することです。
2つのパラメーターのみを持つ関数を実装します。
文字列で1つの電話番号と、単語のリストを含むテキストファイルのコンテンツを受け取ります(特定の改行スタイルは想定しないでください)。
リンクhttps://raw.githubusercontent.com/eneko/data-repository/master/data/words.txtを使用して機能をテストするか、使用することができます/usr/share/dict/words
(詳細については、単語のリストを含むテキストファイルをチェックしてください[閉じる]情報)。
常に少なくとも2つの番号を受け取ると想定できます。
番号を指定すると、単語のリストから読み取って、それらの単語にマッピングされている文字で始まる単語を返します。これは、入力は2から9までの数字でなければならないことを意味し
ます。無効な入力を受け取った場合は、何でも好きなことができます。
一致が見つからない場合は、空のリストnull
/ nil
またはを返すことができます0
。
携帯電話のキーは同等の文字にマッピングされていることに注意してください:
- 0と1は無効です
- 2件一致[abc]
- 3一致[def]
- 4試合[ghi]
- 5一致[jkl]
- 6一致[mno]
- 7一致[pqrs]
- 8試合[tuv]
- そして9試合[wxyz]
例:
f('52726')
//returns ["Japan","japan","Japanee","Japanese","Japanesque"...,"larbowlines"]
f('552')
//returns ["Kjeldahl","kjeldahlization","kjeldahlize"...,"Lleu","Llew"]
f('1234')
//makes demons fly out your nose or divide by 0
f('9999')
//returns ["Zyzzogeton"]
f('999999')
//returns [] or null/nil or 0
関数を実行した後、任意の方法で関数を印刷できます。
ルール:
- 標準の抜け穴は無効です
- あなたが何かを返さなければなりません、たとえそれが
null
/ 何もnil
返さundefined
なければJavaScriptが返すので、このルール。 - 他人の回答を使用または再実装したり、私の実装をコピーしたりすることはできません。
- Javascriptの場合、ブラウザーが既に開かれており、自動要素の
innerText
/textContent
が2番目のパラメーターとして渡されると想定できます。 - コンパイルされた言語の場合、コンパイラに特別な引数を渡すことはできません
- コンパイラの引数を介してファイル名を受け取ることができます
- 変数、マクロ、グローバル変数、定数、非標準クラス、および関数内の他の値を渡すすべてのソートは無効と見なされます。
- JavaScriptでは、キーワードのない変数は
var
コードを無効にします - 関数に名前が付けられます
f
- 関数には2つの引数しか指定できません。
- 実行するコードを500秒未満に保つようにしてください。
- 空白を気にする必要はありません
- ASCII印刷可能文字のみを使用する必要があります。
例外は、印刷不可能な文字のみを使用する言語です(APLと空白は2つの例です)。
得点:
- 最小バイト数が勝つ
- 回答に無効なASCII印刷可能文字が含まれている場合、UTF-32でエンコードされる
回答としてカウントされます。エンコーディングの例外により、回答は文字数でカウントされます。 - 関数本体のみがカウントされ、それ以外で行うことはカウントされません
- 近隣または最も一般的な単語に基づいて予測システムを作成する場合、-30%のボーナス
- 最初の数字に対応する各文字の最初の5つの一致のみを返す場合、サイズが-20%のボーナス(例:245は、「a」で始まる5ワード、「b」で始まる5ワード、「c」で始まる5ワードを返します)。
JavaScriptを使用した実装の例を次に示します。
function f(phone, words)
{
var keypad=['','','abc','def','ghi','jkl','mno','pqrs','tuv','wxyz'];
var regex='';
for(var i=0,l=phone.length;i<l;i++)
{
regex+='['+keypad[phone[i]]+']';
}
var regexp=new RegExp('\\s('+regex+'[a-z]*)\\s','gi');
return words.match(regexp);
}
これを実行するには、リストのリンクを開いて実行します。次に例を示します。
f('9999',document.getElementsByTagName('pre')[0].innerText);
//returns [" Zyzzogeton "]
この例はテスト済みで、Windows 7 Home Edition 64ビットのOpera 12.17 64ビットで動作します。