Votre défi aujourd'hui est d'implémenter une fonctionnalité de type t9 .
Vous implémenterez une fonction qui n'aura que 2 paramètres.
Vous recevrez 1 numéro de téléphone dans une chaîne et le contenu d'un fichier texte avec une liste de mots (ne supposez pas un style de nouvelle ligne spécifique).
Vous pouvez utiliser le lien https://raw.githubusercontent.com/eneko/data-repository/master/data/words.txt pour tester la fonctionnalité, ou utiliser /usr/share/dict/words
(consultez Un fichier texte avec une liste de mots [fermé] pour en savoir plus information).
Vous pouvez supposer que vous recevrez toujours au moins 2 numéros.
Étant donné le nombre, vous lirez une liste de mots et retournerez les mots commençant par les lettres correspondant à ces mots. Cela signifie que l'entrée ne doit être composée que de 2 à 9.
Vous pouvez faire ce que vous voulez si vous recevez une entrée non valide.
Si aucune correspondance n'est trouvée, vous pouvez renvoyer une liste vide, null
/ nil
ou 0
.
N'oubliez pas que les touches du téléphone portable sont mappées à leurs caractères équivalents:
- 0 et 1 ne sont pas valides
- 2 correspondances [abc]
- 3 appariés [def]
- 4 matchs [ghi]
- 5 correspondances [jkl]
- 6 correspondances [mno]
- 7 correspondances [pqrs]
- 8 correspondances [tuv]
- et 9 correspondances [wxyz]
Exemples:
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
Après avoir exécuté votre fonction, vous pouvez l'imprimer comme vous le souhaitez.
Règles:
- Les failles standard ne sont pas valides
- Vous devez retourner quelque chose, même si c'est
null
/nil
Javascript retourneraundefined
si vous ne retournez pas quelque chose, donc cette règle. - Vous ne pouvez pas utiliser ou réimplémenter les réponses des autres ou copier ma mise en œuvre.
- Vous pouvez supposer, pour Javascript, que le navigateur sera déjà ouvert et que le
innerText
/textContent
de l'élément automatique sera passé comme 2ème paramètre - Pour les langues compilées, vous ne pouvez pas passer d'arguments spéciaux au compilateur
- Vous pouvez recevoir le nom de fichier sur les arguments du compilateur
- Les variables, macros, variables globales, constantes, classes non standard et tout le tri passant d'autres valeurs à l'intérieur de la fonction seront considérés comme invalides.
- En Javascript, les variables sans le mot clé
var
rendent votre code invalide - Votre fonction sera nommée
f
- Vous ne pouvez avoir et seulement que 2 arguments sur votre fonction
- Essayez de garder votre code sous 500 secondes pour l'exécuter.
- Vous n'avez pas à vous soucier des espaces blancs
- Vous devez utiliser uniquement des caractères imprimables ASCII .
Les exceptions sont les langues qui n'utilisent des caractères non-imprimables (APL et espaces blancs sont 2 exemples).
Notation:
- Plus petit nombre d'octets gagne
- La présence de caractères imprimables ASCII invalides dans votre réponse comptera comme la réponse codée en UTF-32.
L'exception au codage fera que votre réponse sera comptée par caractères . - Seul le corps de la fonction compte, ne comptez rien d'autre que vous faites en dehors
- Bonus de -30% si vous faites un système de prédiction basé sur le quartier ou les mots les plus courants
- Bonus de -20% si vous ne renvoyez que les 5 premières correspondances pour chaque lettre correspondant au premier chiffre (par exemple: 245 renvoie 5 mots commençant par «a», 5 commençant par «b» et 5 commençant par «c» ).
Voici un exemple d'implémentation utilisant 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);
}
Pour l'exécuter, ouvrez le lien de liste et exécutez, par exemple:
f('9999',document.getElementsByTagName('pre')[0].innerText);
//returns [" Zyzzogeton "]
Cet exemple a été testé et fonctionne sous Opera 12.17 64bits sur Windows 7 Home Edition 64bits.